Qual è il modo migliore per rendere persistenti i dati in un'applicazione desktop Java?
-
09-06-2019 - |
Domanda
Ho un grande albero di oggetti Java nella mia applicazione desktop e sto cercando di decidere il modo migliore per mantenerli come file nel file system.
Alcuni pensieri che ho avuto sono stati:
Avvia il mio serializzatore utilizzando DataOutputStream:Questo mi darebbe il massimo controllo su cosa c'era nel file, ma a costo di microgestirlo.
Vecchia serializzazione che utilizza ObjectOutputStream e le sue varie classi correlate:Tuttavia non ne sono convinto poiché trovo i dati fragili.La modifica della struttura di qualsiasi oggetto interrompe le sue istanze serializzate.Quindi sono bloccato in quello che sembra essere un orribile incubo di controllo delle versioni.
Serializzazione XML:Non è così fragile, ma è significativamente più lento della serializzazione diretta.Può essere trasformato al di fuori del mio programma.
JavaDB:L'avevo considerato poiché mi sento a mio agio nello scrivere applicazioni JDBC.La differenza qui è che l'istanza del database persisterebbe solo mentre il file veniva aperto o salvato.Non è carino ma...si presta alla migrazione verso un'architettura server centrale qualora se ne presentasse la necessità in un secondo momento e introduce la possibilità di interrogare il datamodel in modo più semplice.
Sono curioso di vedere cosa ne pensano gli altri.E spero di aver perso qualche approccio ovvio e più semplice di quelli sopra.
Ecco alcune altre opzioni selezionate dalle risposte seguenti:
- Un database di oggetti - Ha un'infrastruttura significativamente inferiore rispetto agli approcci ORM e funziona più velocemente di un approccio XML.grazie aku
Soluzione
db4objects potrebbe essere la scelta migliore
Altri suggerimenti
Io opterei per l'opzione finale JavaDB (distribuzione Sun di Derby) e utilizzare un livello relazionale di oggetti come Ibernazione O iBatis.Utilizzando i primi tre approcci significa che dedicherai più tempo alla creazione di un motore di database che allo sviluppo di funzionalità dell'applicazione.
Dai un'occhiata a Hibernate come un modo più semplice per interfacciarsi con un database.
Nella mia esperienza, probabilmente starai meglio utilizzando un database incorporato.SQL, sebbene tutt'altro che perfetto, di solito è molto più semplice che progettare un formato di file che funzioni bene ed sia affidabile.
Non ho usato JavaDB, ma ho avuto buona fortuna H2 E SQLite.SQLite è una libreria C il che significa un po' più di lavoro in termini di distribuzione.Tuttavia, ha il vantaggio di archiviare l'intero database in un'unica libreria multipiattaforma.Fondamentalmente, è un formato di file generico preconfezionato.SQLite è stato così utile che ho persino iniziato a usarlo al posto dei file di testo negli script.
Fai attenzione a usare Hibernate se stai lavorando con un piccolo problema di persistenza.Aggiunge molta complessità e sovraccarico della libreria.L'ibernazione è davvero utile se lavori con un gran numero di tabelle, ma probabilmente sarà complicato se ti servono solo poche tabelle.
XStream da codehaus.org
Serializzazione/deserializzazione XML in gran parte senza codifica.Puoi utilizzare le annotazioni per modificarlo.Lavorare bene in due progetti in cui lavoro.
Vedi la presentazione del mio gruppo utenti su http://cjugaustralia.org/?p=61
Penso che dipenda da cosa ti serve.Vediamo le opzioni:
1) Scartato immediatamente!Non mi giustificherò nemmeno.:)
2) Se hai bisogno di una persistenza semplice, veloce e con un solo metodo, mantienila.Manterrà il grafico dei dati completo così com'è!Fai attenzione a quanto tempo manterrai gli oggetti persistenti.Come lei stesso ha sottolineato, il controllo delle versioni può essere un problema.
3) Più lento di (2), richiede codice aggiuntivo e può essere modificato dall'utente.Lo userei solo se i dati dovrebbero essere utilizzati da un cliente in un'altra lingua.
4) Se hai comunque bisogno di interrogare i tuoi dati, attieniti alla soluzione DB.
Beh, penso che tu abbia già risposto alla tua domanda :)