Sto creando un software che dovrebbe accettare una determinata forma di dati e qualcosa nei dati. Abbiamo deciso di creare in anticipo una piccola dipendenza che verrà utilizzata per rendere più fluido lo sviluppo del software. Stiamo pianificando di accettare il supporto per i file json, csv, yaml e sql / url (che consumano il resto) e convertirli in elenchi ( ArrayList
). Per ora, abbiamo il supporto per JSON. Abbiamo creato un genitore Data Reader
che contiene due contratti di metodo getData
, uno per i caricamenti di file e uno per i collegamenti url: ognuno restituisce json convertito in un elenco. Questo è implementato da JsonDataReader
. Funziona e perfettamente utilizzabile. Tuttavia, ho questo come codice per il software:
list = JsonDataReader().getData(new File("file"));
Questo lo vedo come un problema. Se il mio software ha questo come codice, significa che accetterà solo severamente Json. Cosa succede se creiamo il YamlDataReader
, CsvDataReader
e molto altro? C'è un modo migliore per progettare il convertitore multiplo che sarà implementabile per lo sviluppo del software?
Processo / Flusso del software
- Carica il file dalla pagina di caricamento
- Il file può ora essere trovato nella directory del server
- Nella pagina di elaborazione dati, il file viene acquisito e convertito nell'elenco come mostrato nel codice sopra.
Sarebbe meglio se creassi un componente che accetti qualsiasi dato, rilevi il tipo di file, lo converta e lo restituisca come lista?
Il mio collega ha suggerito questo.
What you could do is you have something that stores all of your data readers in a map and the key is the file extension it basically then gets from the Map the appropriate DataReader based on the file type
È possibile? Per memorizzare DataReaders
come valori? I DataReader sono i convertitori.
Il mio collega ha anche sottolineato che se andassi con DataReader that accepts anything and returns a list
sarebbe un caso di comportamenti multipli e non di polimorfismo - indicando un cattivo design.