2010-05-27 2 views
5

Vorrei aggiungere persistenza alla mia applicazione basata su Swing; e questa è la prima volta che faccio qualcosa del genere.Rendere persistenti le applicazioni Java Swing

So usare le API di serializzazione Java (anche se sto usando xstream), so che i componenti di JComponent sono serializzabili, ma sono interessato a più considerazioni architetturali: come un'applicazione deve essere progettata in modo da renderla persistente diventa facile; ecc

Sarei felice di vedere qualsiasi fonte con una riflessione approfondita di questi problemi, anche se mi sarei anche felice di sentire alcune best practice in modo esplicito :)

risposta

7

è necessario utilizzare un model-view-controller approach. Si serializza solo il modello, non la vista. La vista dovrebbe essere popolata dal modello. Serializzazione di componenti Swing non è comunque raccomandato a tutti:

While Swing components do implement the Serializable interface, they are not portable between different versions of the Java Virtual Machine

Guardando a quello che si ha, si dovrebbe avere alcune classi che sono il vostro modello e hanno solo i dati. Queste classi saranno serializzate usando XStream da qualche parte. Le classi Swing hanno quindi metodi per ricevere queste classi modello e popolare i campi e gli editor. È quindi possibile estendere l'interfaccia utente, ad esempio, senza dover modificare la classe, aggiungere più funzionalità o fornire visualizzazioni diverse per lo stesso set di dati.

Per renderlo più elaborato, lo Swing Component non deve memorizzare e caricare il modello, ma è necessario disporre di un'interfaccia controller da passare al componente swing per eseguire queste operazioni. In questo modo, è possibile migliorare il test dell'unità e disaccoppiare la logica di archiviazione dalla logica della vista.

Se XStream è configurato correttamente e se si presta attenzione al modello e ai campi, dovrebbe essere possibile aggiungere più campi alle classi del modello senza interrompere la compatibilità con le versioni precedenti.

Non è consigliabile utilizzare comunque Serializzazione Java, in quanto non è consigliabile utilizzarlo per l'archiviazione. La serializzazione Java eccelle nel richiamo del metodo remoto. E 'relativamente fragile quando le classi del modello cambiano ..

0

E javadoc dice (ad esempio in materia JComponent): A partire dal 1.4, supporto per l'archiviazione a lungo termine di tutti JavaBeansTM è stato aggiunto al pacchetto java.beans. Si prega di consultare XMLEncoder.

Quindi vedere XMLEncoder.

Dal punto di vista architettonico, questa serializzazione funziona meglio con i bean, le raccolte e la nozione di valore predefinito. Sui bean, salva solo le proprietà bean con un valore diverso da quello predefinito. (scusate il mio inglese)

È possibile configurarlo come desiderato.

+0

Se il java bean è nuovo e utilizzato per i dati, XMLEncoder è una buona idea. Altrimenti, continuo a pensare che serializzare un JComponent sia in generale una cattiva pratica. –

+0

@ Mario Ortegón: Sì, sono d'accordo; ma l'uomo può vedere la "versione bean" di un JComponent come un modello di design leggero: non ci sono gli ascoltatori, ad esempio, solo il colore, lo sfondo, la posizione ... Quindi, se vogliamo serializzare/deserializzare, è necessario ricostruire controler logica. Penso che il codificatore XML non sia molto buono, ma non è male. È interessante :-) – Istao