Linea guida: Progettazione di JavaBean
Questa linea guida descrive come progettare un JavaBean per un'applicazione J2EE.
Relazioni
Elementi correlati
Descrizione principale

Introduzione

Questa linea guida si concentra sulla progettazione di JavaBean e sulle varie scelte che un progettista può fare.

Per maggiori informazioni sui Javabean, vedere Concetto: JavaBean.

Proprietà di JavaBean

Internamente un valore di proprietà può essere memorizzato come campo privato, ma può essere anche calcolato. Il progettista può scegliere di calcolare in anticipo il valore della proprietà o di utilizzare una semplice valutazione, in cui il valore verrà calcolato se richiesto da un chiamante.

Il progettista può scegliere inoltre di limitare o vincolare la proprietà. Se la proprietà è già limitata o vincolata, il progettista deve dunque decidere sul meccanismo di eventi e notifica.

Eventi e notifica

Per l'implementazione del meccanismo di notifica, il progettista ha due opzioni:

  • Utilizzare le classi PropertyChangeSupport e PropertyChangeEvent dal pacchetto java.beans.
  • Creare un meccanismo di notifica personalizzato

Le classi dal pacchetto java.beans forniscono un'implementazione applicabile in molte situazioni. PropertyChangeEvent contiene il riferimento all'oggetto che genera l'evento, il nome della proprietà come String e due oggetti rappresentanti il vecchio e il nuovo valore della proprietà. La classe PropertyChangeSupport gestisce una collezione di PropertyChangeListeners e contiene il codice per la notifica nel metodo firePropertyChange.

Diagramma descritto nel testo di accompagnamento.

PropertyChangeSupport viene comunemente utilizzato per i JavaBean che fanno parte delle interfacce utente.

Le notifiche personali sono utili quando si deve ridurre l'eccesso della creazione di oggetti di evento. L'aspetto negativo è che l'implementatore deve implementare il meccanismo di notifica. L'implementatore della notifica personale deve ricordarsi che un thread differente può aggiungere o eliminare listener durante il processo di notifica. Al fine di fornire il comportamento adeguato, la maggior parte delle soluzioni fanno un copia della collezione che contiene i listener, la notifica viene dunque attuata utilizzando la copia. Molte delle implementazioni pubblicate fanno la copia all'inizio del processo di notifica, dando luogo alla creazione di molti cloni e prestazioni carenti. Tuttavia, poiché le notifiche sono più comuni dell'aggiunta o eliminazione di listener, è possibile creare in anticipo una copia più duratura durante l'aggiunta o eliminazione di listener e in seguito riutilizzarla, consentendo un'esecuzione più rapida.

Considerando la produttività degli sviluppatori, la notifica personalizzata dovrebbe essere eseguita solo se il supporto alla modifica della prestazione della proprietà da parte del pacchetto java.beans risulta essere il collo di bottiglia.

Gli esempi seguenti dimostrano sia l'utilizzo del pacchetto java.beans sia l'utilizzo di un meccanismo di notifica personalizzato.

 

Esempio: Tank JavaBean utilizzando java.beans.PropertyChangeSupport

Di seguito viene illustrato un JavaBean rappresentante un Tank, che ha una proprietà legata: livello. Quando il livello di Tank viene modificato, Tank genera una PropertyChangeEvent gestita dall'oggetto TankController object.

Diagramma descritto nel testo di accompagnamento.

 

Esempio: Tank Java Bean che utilizza una notifica personalizzata

Nell'esempio seguente, la classe Tank viene implementata con un meccanismo di notifica personalizzato e più efficace, che permette di evitare la creazione di oggetti durante la notifica.

Diagramma descritto nel testo di accompagnamento.