Directriz: Diseño de JavaBeans
Esta directriz trata la forma en que diseñar JavaBeans para una aplicación J2EE.
Relaciones
Elementos relacionados
Descripción principal

Introducción

Esta directriz se centra en el diseño de JavaBeans y las distintas opciones que puede realizar un diseñador.

Consulte la sección Concepto: JavaBeans para obtener más información.

Propiedades de los JavaBeans

De forma interna, un valor de propiedad se puede almacenar como un campo privado, pero también puede ser un campo calculado. El diseñador tiene la posibilidad de precalcular el valor de la propiedad o bien utilizar la evaluación diferida en al que el valor sólo se calculará cuando el interlocutor lo solicite.

El diseñador también tiene la posibilidad establecer límites o restricciones a la propiedad. Si la propiedad tiene límites o restricciones, entonces el diseñador debe decidir sobre el mecanismo de sucesos y notificación.

Sucesos y notificación

El diseñador tiene dos opciones para implementar el mecanismo de notificación:

  • Utilizar las clases PropertyChangeSupport y PropertyChangeEvent del paquete java.beans.
  • Crear un mecanismo personalizado de notificación.

Las clases del paquete java.beans proporcionan una implementación que se puede aplicar en la mayoría de situaciones. PropertyChangeEvent contiene la referencia al objeto que ha desencadenado el suceso, el nombre de la propiedad como una serie de texto y dos objetos que representan el valor antiguo y el nuevo valor de la propiedad. La clase PropertyChangeSupport mantiene una colección de PropertyChangeListeners y contiene el código para la notificación en el método firePropertyChange.

Diagrama descrito en el texto adjunto.

PropertyChangeSupport se utiliza habitualmente para JavaBeans que forman parte de interfaces de usuario.

La notificación personalizada puede ser apropiada cuando es necesario minimizar la sobrecarga asociada a la creación de objetos de suceso. El inconveniente está en que el implementador debe implementar un mecanismo de notificación. El implementador de la notificación personalizada debe tener en cuenta que distintas hebras pueden añadir o eliminar escuchas durante el proceso de notificación. Para proporcionar un comportamiento correcto, en la mayoría de soluciones se crea una copia de la colección que mantienen los escuchas; la notificación se realiza entonces con la copia. La mayoría de las implementaciones publicadas crean dicha copia al principio del proceso de notificación, que da lugar a la creación de muchos clones y degrada el rendimiento. Sin embargo, dado que las notificaciones son mucho más comunes que las adiciones o eliminaciones de escuchas, una copia de larga vida se puede crear anticipadamente durante la adición o eliminación de los escuchas y a continuación reutilizarla para las notificaciones, proporcionando una ejecución más rápida.

Teniendo en cuenta la productividad de los desarrolladores, la notificación personalizada sólo se debería intentar cuando se demuestre que el rendimiento del soporte de cambio de propiedad del paquete java.beans sea el cuello de botella.

En los siguientes ejemplos se demuestran tanto el uso del soporte de cambio de propiedad del paquete java.beans como la utilización de un mecanismo de notificación personalizado.

 

Ejemplo: JavaBean Tank utilizando java.beans.PropertyChangeSupport

Aquí tenemos un JavaBean representando un tanque, que tiene una propiedad de límite: level. Cuando el nivel de Tank cambia, Tank desencadena un PropertyChangeEvent que el objeto TankController maneja.

Diagrama descrito en el texto adjunto.

 

Ejemplo: JavaBean Tank utilizando notificación personalizada

En el siguiente ejemplo, la clase Tank se implementa con un mecanismo de notificación más eficiente y personalizado, que prescinde de la creación de objetos durante la notificación.

Diagrama descrito en el texto adjunto.