Quote Originariamente inviata da MBdip Visualizza il messaggio
Io ho dei motori, dei componenti delle macchine che hanno un loro stato, con i propri metodi e quant'altro.
Devo salvare tutto in un unico file.
Quindi la tua "base dati" è composta da un solo file che contiene oggetti serializzati. All'avvio della applicazione (o appena necessario), leggi tutti gli oggetti, poi l'applicazione lavora con questi dati e alla terminazione della applicazione (o in qualunque altro momento) gli oggetti possono essere salvati su file.
Corretto? Se così, ok.

Quote Originariamente inviata da MBdip Visualizza il messaggio
Allora ho pensato: per avere tutti gli elementi raggruppati creo Degli archivi.
Allora ho creato ArchivioComponenti ArchivioMotori ArchivioMacchine, ed ognuno di questi contiene le arraylist dei corrispettivi oggetti. In queste classi c'è il metodo per aggiungere l'oggetto alla lista.
Ma nella classe Database vuoi mettere le liste "crude" cioè proprio List<X> o questi archivi di cui parli adesso cioè es. ArchivioComponenti ecc...?

Quote Originariamente inviata da MBdip Visualizza il messaggio
Come altro potrei implementare?
Supponendo che hai fatto queste classi ArchivioComponenti, ArchivioMotori, ... in cui ciascuna incapsula e nasconde la lista, offrendo però i metodi per gestirla, innanzitutto puoi mettere questi oggetti come campi di istanza di Database. Chiaramente sia Database, sia le classi di archivio, sia le classi degli oggetti (es. Motore) devono essere serializzabili.
A quel punto Database è tranquillamente serializzabile e con i dati al posto giusto.

Database potrebbe tecnicamente anche avere i metodi per load/save. Però in linea di massima sarebbe preferibile separare la logica di I/O in una classe separata es. DatabaseFile. Sarebbe più pulito e flessibile.

In modo da poter fare, immaginiamo ora, un codice del genere:

codice:
DatabaseFile dbfile = new DatabaseFile("file.xyz");
Database db = dbfile.load();
......
dbfile.save(db);