Ho letto di Domain Driven Design per quasi due anni e ho introdotto con cautela alcuni concetti nel mio lavoro quotidiano o almeno facendo piani su come le cose che faccio regolarmente potrebbero essere fatte all'interno di un Domain Driven Design.
Una conclusione a cui sto iniziando a giungere in particolare in risposta alla lettura di più sulla Sourcing degli eventi e sulla segregazione di responsabilità delle query di comando (CQRS) secondo cui forse gli oggetti di dominio sono destinati a essere utilizzati solo a scopo di scrittura. Per essere più chiari, sembra che ciò che le persone suggeriscono sottilmente in gran parte della documentazione che ho letto che gli oggetti di dominio sono responsabili di eseguire operazioni / calcoli incentrati sul dominio, convalida e quindi sono principalmente lì a fornire una strada per perseverare l'infrastruttura fornita all'interno di un'implementazione del repository. Anche se mi piace il fatto che ciò possa semplificare notevolmente il modello di dominio in quanto elimina la responsabilità di esporre lo stato.
Se è davvero corretto che gli oggetti di dominio debbano principalmente essere usati come oggetti di sola scrittura, ciò solleva alcune domande a cui spero che qualcuno possa rispondere.
- Come si eseguono test unitari su un oggetto che ha setter o metodi che modificano lo stato di un oggetto ma che non forniscono un'interfaccia pubblica esteriore per leggere lo stato come i getter di proprietà in C #? Va bene esporre lo stato esclusivamente allo scopo di rendere quell'oggetto testabile?
- Come si mostra a un utente i risultati dei calcoli o delle operazioni eseguiti nel dominio senza doverli persistere e quindi estrarre i risultati dall'archivio persistente al di fuori del contesto del dominio? Va bene esporre lo stato al solo scopo di mostrare i risultati.
La regola empirica è che gli unici getter di proprietà (ottenere gli accessor) dovrebbero essere anche quelli scrivibili nel dominio? O detto diversamente, le proprietà di sola lettura dovrebbero essere l'unica cosa da evitare poiché sono lì solo per scopi di lettura e quindi non svolgono un ruolo necessario nel modello di dominio effettivo?
Materiale correlato: