Progettare correttamente una classe di dati

0

Quindi ho il seguente problema: ho bisogno di creare una classe dati contenente un gruppo di proprietà. Ho anche bisogno di avere proprietà di intestazione e proprietà figlio poiché userò un elenco espandibile in Android. Ha bisogno del conteggio dell'intestazione e delle proprietà dei figli. Fin qui tutto bene. Ho visto due opzioni qui.

  1. Posso creare un gruppo di campi appropriati del tipo ( String name, String category... ) e il codice rigido il conteggio dei campi dell'intestazione e dei campi secondari. Ciò significherebbe che ogni volta che decido di aggiungere una nuova proprietà a questa classe di dati, dovrei andare avanti e aggiungerla ovunque sia necessaria. Ciò include un sacco di cose come un esportatore che esporta i dati, un importatore che lo importa, l'adattatore List e possibilmente altre classi.
  2. L'altra opzione è rendere le proprietà il più astratte possibili. Ho trovato questo oggetto Property che contiene String name; String value; Class<?> type;boolean exportable; . Li terrò in una Map<String, Property> nella classe dati. In questo modo quando ho bisogno di aggiungere un'altra proprietà a questo progetto dovrò solo aggiungerla alla classe dati. Questo non è l'ideale dato che devo ancora aggiungere del codice hard alla classe data in aggiunta, ma comunque è solo lì e non dovrò andare in giro per classi toccando altri pezzi di codice. Poiché l'esportatore per un esempio passerà semplicemente attraverso tutti gli oggetti Property nella mappa ed esporterà gli esportabili. Lo stesso con l'importatore. L'adattatore di lista otterrà anche il conteggio delle proprietà dalle dimensioni della mappa.

La seconda variante sembra interessante, ma è complicata dal momento che i metodi get sono codificati per fare cose come propertiesMap.put(propertyName, new Property(propertyName, propertyValue, propertyType, exportable); che sembra ancora abbastanza hacky.

Questo è un progetto personale quindi probabilmente nessun altro lo leggerà, ma voglio diventare migliore nella progettazione del codice, quindi ho voluto chiedere ai più esperti un consiglio. Con quale corso dovrei andare con se lavorassi con altri su questo progetto?

La prima soluzione è abbastanza semplice da leggere ma richiederà più modifiche all'aggiunta di una nuova proprietà. Immagino di poterlo specificare in un commento.

La seconda soluzione è più difficile da leggere ma ridurrà il carico di lavoro. Poi di nuovo non ho esperienza sufficiente per vedere quali altre cose saranno necessarie in questo progetto e non posso prevedere quale parte del programma dovrà essere estesa, ma se dovessi aggiungere delle proprietà penso che la seconda opzione sia migliore.

    
posta courage 01.05.2017 - 22:49
fonte

0 risposte