C # - Design e accoppiamento basati sui dati - Madre, posso?

1

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

    
posta Aris M 26.01.2017 - 17:13
fonte

1 risposta

3

"Accoppiamento" è una di quelle parole che tutti pensano sia sporca. Il fatto è che, senza un certo grado di accoppiamento, nessuna programmazione sarebbe mai possibile. La chiave è saper distinguere tra accoppiamento buono e cattivo.

Secondo me, "cattivo accoppiamento" è quando esiste una dipendenza fisica in cui non esiste alcuna dipendenza logica. In altre parole, se devi modificare il codice che sembra non correlato alla cosa che sei cercando di fare, probabilmente hai un cattivo accoppiamento.

Sembra che tu abbia una serie di classi intese per la rappresentazione dei dati. Accoppiamento errato si verificherebbe se tali classi fossero accoppiate con la logica per la persistenza (ad esempio se contenessero codice per la memorizzazione dei dati in un filesystem o database). Ma non è male per quelle classi essere accoppiate con lo schema, dal momento che lo schema definisce la rappresentazione logica, e naturalmente le classi dovrebbero essere in accordo con quella rappresentazione.

    
risposta data 27.01.2017 - 23:01
fonte

Leggi altre domande sui tag