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.
Ma nella classe Database vuoi mettere le liste "crude" cioè proprio List<X> o questi archivi di cui parli adesso cioè es. ArchivioComponenti ecc...?
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);