Dove / come conservare i dati del programma?

0

Questa potrebbe essere più una questione di progettazione del software - ma ho lavorato al mio primo progetto Java "reale, non accademico" e recentemente ho imparato a conoscere le buone pratiche del codice (come ad esempio scomporre i metodi in classi rispettive, quindi che la mia classe controller non ha necessariamente più di 50 metodi tutti insieme) e mi ha portato a una domanda sull'archiviazione dei dati.

In poche parole - il mio progetto legge un file CSV, dove ogni riga contiene il nome di una persona e la "data di inizio" - e quindi fornisce al programma promemoria periodici dell'utente in base al giorno in cui ciascuna persona è in relazione alla data di inizio. (Ad esempio, riceverai notifiche quando la persona X ha raggiunto il giorno Y ..)

Attualmente, ho una classe Person che contiene un nome e una data, una ArrayList di tipo Person nel mio controller, nonché un metodo usato per leggere il file CSV, creare oggetti di tipo Person e aggiungerli a ArrayList . Questo AL vive nella classe Controller e mi chiedevo se esistesse un modo migliore per farlo considerando che altri metodi (che potrebbero essere in altre classi) avranno bisogno di accedere a tali dati?

    
posta Hazim 29.06.2016 - 15:43
fonte

2 risposte

2

Normalmente mi aspetto che tu abbia una sorta di oggetto modello separato dal controller. Ciò gestirà la gestione dei dati e forse delegherà a una sorta di livello di persistenza (un DAO o un oggetto di accesso ai dati).

Il tuo DAO potrebbe supportare un qualche tipo di meccanismo del tipo di query, ad es.

Person getPersonByName(String name);
List<Person> getPersons();

ecc. (le tue esigenze detteranno quanto sopra). Di conseguenza, è nascosto dalla tua applicazione che stai attualmente utilizzando un elenco di array e, a un certo punto, puoi sostituire una versione alternativa del tuo DAO che delega a un database, un servizio Web remoto, ecc.

In quanto tale, questo:

well as a method used to read the CSV file, create objects of type Person, and add them to the ArrayList.

dovrebbe risiedere in qualche parte all'interno del tuo DAO (dato che presumibilmente dovresti fare qualcosa di diverso se ti connetti a un database). Puoi fare riferimento a quanto sopra in un metodo initialise() o simile, eseguirlo pigramente sulla prima richiesta ecc.

Il tuo controller gestirà quindi il tuo modello e controllerà funzionalità aggiuntive, come la funzionalità di promemoria, il tuo mailer, ecc.

    
risposta data 29.06.2016 - 15:51
fonte
1

Nel considerare il giusto approccio, dovresti pensare a come i dati di input potrebbero cambiare nel tempo e dove la fonte ultima di verità è per quei dati. Ad esempio se si tratta di un elenco di dipendenti, quindi cosa succede se viene assunto un nuovo noleggio. Qualcuno quindi ti invia un file CSV aggiornato, o ti aspetteresti (in una versione futura) di accedere a un database delle risorse umane centralizzato che verrebbe aggiornato (da un altro team) quando i nuovi assunti vengono a bordo ecc.

Requisiti futuri come questo sono la ragione per cui l'astrazione del codice di archiviazione dati dal resto dell'applicazione ha senso. MVC è uno schema di progettazione comune per raggiungere questo obiettivo (vedi link e < a href="http://www.austintek.com/mvc/"> link ), in questo caso il tuo modello è attualmente un file CSV ma in futuro potrebbe essere un database all'interno dell'applicazione o di un'altra applicazione.

    
risposta data 29.06.2016 - 16:40
fonte

Leggi altre domande sui tag