Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    42
    Allora, ti spiego…
    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.
    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.
    Dopo di che ho pensato di raggruppare le arraylist in un database Da salvare in un file… Ovviamente nel mio codice non c'è Database.componenti.add(this); Ma un metodo equivalente nell'archivio dell'oggetto.
    Siccome le arraylist sono uniche, ho deciso di renderle static (non ci sono due arraylist di componenti o motori).
    Fa così tanta acqua questo design?
    Come altro potrei implementare?


    Ultima modifica di MBdip; 28-04-2014 a 15:47

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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);
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    42
    il codice:
    codice:
    Database db = Database.load();
    sarebbe scorretto?

    effettvamente C'è qualcosa che non va nel mio codice…
    Cioè, carico il database all'interno di una classe che serve di visualizzare un menu (obbrobrio) istanziando un oggetto Database db, Per aggiungere un componente alla lista, Nella classe Componenti nel costruttore chiamo il metodo in questo modo:

    codice:
    menu.db.get_ArchivioComponenti().addComponenti (this);
    ma credo fortemente ci sia qualcosa che non va

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da MBdip Visualizza il messaggio
    il codice:
    codice:
    Database db = Database.load();
    sarebbe scorretto?
    Tecnicamente, di per sé, no. Ma sarebbe poco "object-oriented". Oltre al fatto che se load/save sono in Database, allora Database ha 2 responsabilità principali: "modellare" il database e fare I/O. Quindi sicuramente meno bello dal punto di vista del design.

    Quote Originariamente inviata da MBdip Visualizza il messaggio
    Nella classe Componenti nel costruttore chiamo il metodo in questo modo:

    codice:
    menu.db.get_ArchivioComponenti().addComponenti (this);
    Mi spiace ma è davvero un brutto design che una classe Componente (qualunque entità rappresenti .. non lo so) debba "sapere" del DB e che vada ad aggiungere sé stesso alla base dati.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.