Qual è il modo migliore per rendere persistenti i dati in un'applicazione desktop Java?

StackOverflow https://stackoverflow.com/questions/37271

  •  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
È stato utile?

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 :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top