Che senso ha?
Risposta breve: non lo fa .
Risposta più lunga: i modelli più pesanti per lo sviluppo di un modello di dominio non si applicano a quelle parti della soluzione che sono solo un database.
Udi Dahan ha avuto un'interessante osservazione che può aiutare a chiarire questo
Dahan ritiene che un servizio debba avere sia una sorta di funzionalità che alcuni dati. Se non ha dati, allora è solo una funzione. Se tutto ciò che fa è eseguire operazioni CRUD sui dati, allora è un database.
Il punto del modello di dominio, dopo tutto, è quello di garantire che tutti gli aggiornamenti ai dati mantengano invariante il business corrente. Oppure, per dirla in altro modo, il modello di dominio è responsabile di garantire che il database che agisce come sistema di registrazione sia corretto.
Quando hai a che fare con un sistema CRUD, di solito non sei il sistema di registrazione per i dati. Il mondo reale è il libro dei record, e il tuo database è solo una rappresentazione memorizzata nella cache del mondo reale.
Ad esempio, la maggior parte delle informazioni che appaiono in un profilo utente, come un indirizzo e-mail o un numero di identificazione rilasciato dal governo, hanno una fonte di verità che vive al di fuori della tua attività - è l'amministratore di posta di qualcun altro che assegna e revoca gli indirizzi e-mail, non la tua app. È il governo che assegna SSN, non la tua app.
Quindi normalmente non eseguirai alcuna convalida del dominio sui dati che ti vengono dal mondo esterno; potresti avere controlli in atto per garantire che i dati siano ben formati e adeguatamente disinfettati ; ma non sono i tuoi dati - il tuo modello di dominio non ottiene il veto.
In un approccio DDD che utilizza i livelli, sembra che le operazioni CRUD attraversino il livello del dominio. ma almeno nel nostro caso, questo non sembra avere senso.
Questo è giusto per il caso in cui il database è il libro dei record .
Ouarzy ha detto così .
Lavorando su molti codici legacy, tuttavia, osservo errori comuni per identificare ciò che è all'interno del dominio e ciò che è all'esterno.
Un'applicazione può essere considerata CRUD solo se non esiste una logica aziendale attorno al modello di dati. Anche in questo (raro) caso, il tuo modello di dati non è il tuo modello di dominio. Significa solo che, poiché non è coinvolta alcuna logica aziendale, non abbiamo bisogno di alcuna astrazione per gestirla, e quindi non abbiamo un modello di dominio.
Utilizziamo il modello di dominio per gestire i dati che appartengono al dominio; i dati dall'esterno del dominio sono già gestiti da qualche altra parte - stiamo solo memorizzando nella cache una copia.
Greg Young utilizza i sistemi di magazzino come illustrazione principale di soluzioni in cui il libro dei record è altrove (ovvero: il piano di magazzino). L'implementazione che descrive è molto simile alla tua: un database logico per acquisire i messaggi ricevuti dal magazzino e quindi un database logico separato che memorizza nella cache le conclusioni tratte dall'analisi di tali messaggi.
Quindi forse abbiamo due contesti limitati qui? Ognuno con un modello diverso per uninvestment account
Può essere. Sarei riluttante ad etichettarlo come un contesto limitato, perché non è chiaro quale altro bagaglio lo accompagni. Potrebbe essere che tu abbia due contesti, potrebbe essere un contesto con sottili differenze nel linguaggio onnipresente che non hai ancora imparato.
Possibile cartina di tornasole: quanti esperti di dominio hai bisogno di due esperti di dominio per coprire questo spettro, o solo uno che parla dei componenti in modi diversi. Fondamentalmente, potresti essere in grado di indovinare quanti contesti limitati hai lavorando all'indietro la legge di Conway.
Se ritieni che i contesti limitati siano allineati ai servizi, potrebbe essere più semplice: dovresti essere in grado di distribuire queste due funzionalità in modo indipendente? Sì suggerisce due contesti limitati; ma se devono essere sincronizzati, forse è solo uno.