In passato ho utilizzato il design basato sui dati e ha funzionato abbastanza bene. Ciò che non mi piace è se hai bisogno di una forma di stringa il cui valore deve essere aggiornato in base ad altri valori. ad es. "Esporta% x percento di% y". In tal caso avrai bisogno di una colonna in più che serve da identificatore, per dire quale variabile della tua classe corrisponderà ai simboli convenzionali% x e% y. Ora, non fraintendetemi, potrebbe esserci un modo per aggirare questo, ma questo non è il punto di questa discussione (anche se non mi dispiacerebbe avere una risposta anche a questo).
Ciò che temo per la progettazione basata sui dati è l'accoppiamento stretto. Potrei abusare del termine per questo scenario, ma permettimi di elaborare.
Quando hai una classe template, chiamala Vendor, verrà inizializzata in fase di esecuzione e avrà i dati dalla tua origine dati (xml / csv / txt / etc.) inseriti nei membri della classe. L'idea di un accoppiamento stretto serve a prevenire la co-dipendenza, la dipendenza e le ipotesi di una classe per la funzionalità di un'altra.
Ora, le persone hanno pubblicizzato la progettazione basata sui dati come un metodo di accoppiamento libero, ma la struttura della tua classe DEVE assumere i dati che ci sono all'interno della tua fonte di dati. Ad esempio, se hai quattro colonne, ognuna delle quali rappresenta una variabile nella tua classe, e decidi di inserire una nuova colonna, la classe deve essere ridisegnata per questo scopo. Inoltre, se ti manca un file sorgente dati di questo tipo, hai a che fare con un'istanza di classe non funzionale (o almeno non funzionale al modo in cui è stata progettata per essere).
La mia domanda è: la progettazione basata sui dati non applica effettivamente l'accoppiamento logico tra le classi? Inoltre, cosa succede se hai una classe la cui unica responsabilità è quella di analizzare i file di dati? Quale classe fa riferimento a questo parser, alla classe che ha bisogno dei dati (accoppiamento) o di una classe di terze parti? Utilizzeresti invece un delegato per questo?
Sono tutto per un progetto basato sui dati, ma non posso fare a meno di notare alcuni difetti in determinate situazioni (beh, niente è perfetto). È difficile mantenersi da un punto di vista progettuale, perché una colonna aggiuntiva tra colonne esistenti spezza l'intero output.
Cosa mi manca?
Saluti