Assicurati di rivedere i recenti commenti di Uncle Bob sul ruolo di design in TDD .
Domain-driven design involves a lot of technical patterns, defining well established layers like Application layer, Infrastructure layer, Domain Layer, Persistence layer.
Udi Dahan: "Dio, quanto odio la stratificazione". Passa del tempo a discuterne nel suo talk CQRS - ma diverso (la stratificazione inizia a 18m30s)
Scriverò la tua frase in modo leggermente diverso; DDD riconosce che ci sono una serie di preoccupazioni comuni alla maggior parte delle applicazioni aziendali e che le soluzioni a tali preoccupazioni hanno vite diverse.
Ad esempio: le problematiche relative al dominio, di norma, devono essere flessibili, specialmente quando si personalizza una soluzione per un'azienda in particolare. Dopotutto, il dominio riguarda il modo in cui l'azienda fa affari, vale a dire come l'azienda guadagna, e la possibilità di fornire rapidamente miglioramenti aziendali è gratuita.
D'altra parte, probabilmente non è necessario modificare spesso il componente di persistenza. La soluzione di database che ha funzionato nell'ultima versione probabilmente funzionerà anche con questa versione.
I problemi di applicazione sono da qualche parte nel mezzo; tendono ad essere stabili in modo che gli utenti non abbiano bisogno di imparare una nuova app ad ogni rilascio.
Inoltre, ci possono essere più implementazioni per risolvere qualsiasi preoccupazione. Ad esempio, l'applicazione potrebbe necessitare solo di un'istantanea del suo stato corrente: è sufficiente salvare un file su disco. E nelle tue prime iterazioni, potrebbe essere necessario anche tutto il dominio. Ma alla fine arriva una storia che richiede il supporto di query ad hoc e si riconosce che la configurazione di un database relazionale sarà molto più semplice rispetto all'implementazione di uno da zero. E poi c'è questa caratteristica che funzionerebbe meglio in un database grafico.
Nel frattempo, il CTO vuole una versione dell'app che gira sul suo telefono; l'amministratore delegato ha appena sentito da un tizio che pubblicare un'API è la cosa più importante.
Inoltre, il team di vendita utilizza un modello diverso, quindi dacci la stessa app, con un modello diverso. Oh, ma stiamo viaggiando molto, quindi la nostra versione ha bisogno di funzionare quando siamo fuori linea e la sincronizzazione più tardi ....
In altre parole, applichi i modelli tattici da ddd non da implementando segnaposti vuoti e presumendo che verranno inseriti in seguito, ma riconoscendo al momento di attraversare i flussi "Ehi, questo è il codice di persistenza nel mio modello di dominio, non devo ancora fare il refactoring."