Se hai bisogno di accedere a un database per risolvere il tuo particolare problema, allora ... Bene, devi accedere a un database. Non importa cosa dicono Jimmy Bogards, Eric Evans o chiunque altro. Se le loro regole non ti permettono di farlo, allora infrangi le loro regole, segui le regole di qualcun altro o creane le tue.
Quando leggi alcune regole su internet che qualcuno ha ideato, cerca di capire le motivazioni che stanno dietro, prima di applicarle. In questo modo, hai una ragionevole sicurezza che l'applicazione di tale regola è in linea con le tue esigenze e aspettative.
Regole come quella che hai citato da Eric Evans generalmente hanno una delle due motivazioni:
- Separazione delle preoccupazioni e
- Il disaccoppiamento.
Separazione delle preoccupazioni significa principalmente "scrivere ogni classe o metodo in modo che abbia un'area di competenza e funzioni bene". Spesso, ciò significa scrivere un modulo specializzato solo nell'accesso al database, consentendo ad altri moduli / classi di concentrarsi sui propri interessi specifici senza preoccuparsi dei dettagli del recupero dei dati. Significa anche che le tue classi possono essere "persistenti-ignoranti", nel senso che non devono sapere come salvarle o recuperarle da un database, specialmente una tecnologia di database specifica .
Disaccoppiamento, nel contesto dell'accesso al database, generalmente significa una delle due cose:
- Vuoi isolare il recupero dei dati dal resto del sistema, nel caso in cui tu possa un giorno modificare l'implementazione del database per qualcos'altro, o
- Si vuole prendere in giro il meccanismo di recupero dei dati per scopi di test unitari.
Esistono due modi comunemente accettati per accedere ai dati da un database. Il primo modo è utilizzare le operazioni CRUD (creare, leggere, aggiornare, eliminare). Il secondo è fornire un livello di logica aziendale. Un livello di logica aziendale ha metodi come GetOffers()
che fornisce un recupero dei dati più intelligente (e ottimizzato) rispetto a creare, leggere, aggiornare ed eliminare.
Ora quindi. Modelli di dominio malvagio di Jimmy Bogard:
What is a domain model?
An object model of the domain that incorporates both behavior and data.
Why should I care?
A lot of times – you shouldn’t.
When you should – complex domain, or a long-lived project where behavior gets added piece by piece.
Quindi anche Jimmy Bogard dice "usalo solo se ne hai bisogno."
Molti sviluppatori di software oggi soffrono di "malattia Pattern-Matching". Pensano che tutto nello sviluppo del software è un modello e che scrivere un programma è un esercizio di schemi di cucitura insieme. Sfortunatamente, questo non è esattamente il modo in cui funziona, né sta pedissequamente seguendo le idee di qualcuno sulle "migliori pratiche" senza capire il perché.