Sono confuso dall'applicazione della "Composition Root" (CR) per creare aggregati in DDD. Seemann (2012) definisce CR come una "(preferibilmente) posizione unica ... dove i moduli sono composti". Discute per la composizione di grafici di oggetti all'interno di CR, vicino al punto di ingresso dell'applicazione, e mette in guardia contro la tentazione di comporre "classi un po 'alla volta per creare piccoli sottosistemi".
Un aggregato in DDD appare come un tale sottosistema - un (sotto) grafico con entità e oggetti valore. Evans (2004) e altri testi DDD (Vernon 2013, Ghosh 2017) raccomandano la costruzione di aggregati all'interno di fabbriche, situati nel livello del dominio, "vicini" all'aggregato (ad esempio un metodo factory sulla radice aggregata) o come servizi standalone. Questo sembra contraddire l'approccio CR.
La domanda è se e come gli approcci CR e Factory dovrebbero essere combinati in DDD. Ad esempio,
- Un CR viene inserito all'interno del livello dominio, piuttosto che nella voce dell'app. Forse, le fabbriche sono raggruppate in questa singola posizione
OR - I vantaggi del CR (ad esempio, la "capacità di intercettare i sottosistemi per modificare il loro comportamento"; Seemann) sono irrilevanti per il DDD.
- CR DI non si applica alla creazione di aggregati ma funziona a un livello di granularità più elevato (ad es. iniezione di servizi). Quindi i metodi CR utilizzano le fabbriche per costruire aggregati, per posizionarli sul grafico dell'oggetto.
Riferimenti
M. Seemann, 2012, "Dependency Injection in .NET"
E. Evans, 2004, "Domain-Driven Design"
V. Vernon, 2013, "Implementazione del design basato sul dominio"
D. Ghosh, 2017, "Modellazione del dominio funzionale e reattiva"