Assicurati di rivedere i recenti commenti di zio Bob sul ruolo del design in TDD .
La progettazione guidata dal dominio comprende molti modelli tecnici, che definiscono livelli ben consolidati come Livello applicazione, Livello infrastruttura, Livello dominio, Livello persistenza.
Udi Dahan: "Dio, come odio la stratificazione." Trascorre un po 'di tempo a discuterne nel suo discorso CQRS - ma diverso (la stratificazione inizia a 18m30s)
Scriverei la tua frase in modo leggermente diverso; "DDD riconosce che esistono molte preoccupazioni comuni alla maggior parte delle applicazioni aziendali e che le soluzioni a tali preoccupazioni hanno una durata diversa" .
Ad esempio, i problemi di dominio, di norma, devono essere flessibili, soprattutto quando si personalizza una soluzione per un'azienda specifica. Dopotutto, il dominio riguarda il modo in cui l'azienda fa affari, vale a dire, come l'azienda fa soldi e essere in grado di fornire rapidamente miglioramenti aziendali è entrate gratuite.
D'altra parte, probabilmente non è necessario cambiare spesso la componente di persistenza. La soluzione di database che ha funzionato l'ultima versione probabilmente funzionerà anche questa versione.
Le preoccupazioni dell'applicazione sono da qualche parte nel mezzo; tendono ad essere stabili in modo che gli utenti non debbano imparare una nuova app ad ogni versione.
Inoltre, possono esserci più implementazioni per risolvere qualsiasi dato problema. Ad esempio, l'applicazione potrebbe richiedere solo un'istantanea del suo stato corrente: basterà semplicemente 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 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; il CEO ha appena sentito da un ragazzo che pubblicare un'API è la cosa più importante.
Inoltre, il team di vendita utilizza un modello diverso, quindi forniscici la stessa app, con un modello diverso. Oh, ma stiamo viaggiando molto, quindi la nostra versione deve funzionare quando non siamo in linea e la sincronizzazione in seguito ...
In altre parole, applichi i modelli tattici di ddd non implementando segnaposto vuoti e supponendo che verranno riempiti in seguito, ma riconoscendo invece quando attraversi i flussi "Ehi, questo è il codice di persistenza nel mio modello di dominio, non devo essere fatto refactoring ancora. "