Questa è una struttura di dati stupida e tipizzata con caratteri stringati. È un:
- Lista
- di Maps
- digitato da Stringa
- di Maps
- digitato da Stringa
- di Array data locale
Questo rende difficile creare, attraversare e molto bene farti entrare in codice che assomiglia a:
foo.get(1).get("bar").get("qux")[42]
E indovina un po '... hai un'eccezione del puntatore nullo che è stata lanciata su quella linea.
Anche impostare la struttura non è molto divertente. Che si tratti di una struttura dati grezza significa che devi eseguire tutte le aggiunte e le eliminazioni manualmente lavorando sulle interfacce (che possono essere piuttosto profonde) piuttosto che lavorare con un Costruttore o un Builder.
Hai collegato la rappresentazione passata nel tuo codice alla rappresentazione del file. Quando uno ha bisogno di cambiare, l'altro ha bisogno di cambiare - e possibilmente in più posizioni. Pensa alle gioie che avrai quando avrai un file di dati xml o json o yaml dietro di esso e dovrai passare e modificare le cose.
Tutto sommato è una cattiva idea.
Un'idea migliore sarebbe quella di avere una o più classi che espongono la logica del recupero dei dati. Hai un Structure
. Espone un get(String bar, String qux)
e restituisce un List
. Ciò consente di isolare l'attraversamento della struttura (se è così) nei campi privati in modo che possa essere modificato in base alle esigenze. Espone anche un add(String bar, String qux, LocalDate date)
che ti consente di isolare chiaramente la logica per costruirla in modo testabile.
Potresti scoprire che vuoi altre domande su quei dati a cui vuoi rispondere. Forse vuoi un isInRange(...)
o contains(...)
o qualcos'altro che chiedi. Non riuscendo ad avere questa bella classe con i metodi corrispondenti per rispondere a queste domande, scoprirai che hai un metodo statico in una classe helper (che sta iniziando a sentire) che agisce su quei dati.
public static boolean contains(List<Map<String, Map<String, LocalDate[]>>> arg, LocalDate value)
Sembra brutto com'è. Non farlo.
Se non lo fai questo, avrai una copia di quella logica ogni volta che la usi, che non è affatto SECCO.
In ogni caso, lavorare su strutture di dati grezzi come questo non è auspicabile.