Ho un sistema in cui un utente risponde alla domanda in un modulo. Ho oggetti che rappresentano questo modello, ma non sono abbastanza sicuro su come organizzare questi oggetti in termini di DDD.La radice aggregata con gerarchia profonda è appropriata in DDD?
- Modulo (ha un proprio elenco di) Sezioni;
- Sezione -> (ha il proprio elenco di) Gruppi;
- Gruppo -> (ha una propria lista di) Domande;
- Domanda -> (può avere una propria lista di sottointerrogazioni) Domande;
- Domanda -> (ha il proprio elenco di) Risposte;
- Risposta -> (ha il proprio elenco di) Answer_Details;
- Answer_Detail -> (potenzialmente ha il proprio elenco di dettagli secondari) Sub_Answer_Details.
Ogni oggetto ha più di 15 proprietà e ciascuna non ha senso senza il relativo genitore. Secondo DDD, credo che l'entità Form dovrebbe essere una radice aggregata e tutti gli altri oggetti dovrebbero essere oggetti valore. Ciò significa che ho bisogno di un repository solo per l'entità Form. In questo caso, FormRepository sarà ingombrato con tutti i tipi di metodi CRUD per oggetti figlio. Il mio ragionamento è corretto in termini di DDD? Va bene che finisco con un aggregato molto ampio? Credo che una tale rappresentazione possa facilmente portare a problemi di prestazioni.
Appena letto di recente [Effective Aggregate Design] (https://vaughnvernon.co/?p=139) in cui sono consigliati piccoli aggregati. Potrebbero esserci problemi di prestazioni con un enorme aggregato che contiene una raccolta di entità figlio con migliaia di elementi, perché l'aggiunta di un elemento alla raccolta sta recuperando l'intera raccolta (ad es. Funziona come questa) – xhafan
Corretto il collegamento a [Effective Aggregate Design] (http://dddcommunity.org/library/vernon_2011) – xhafan
Dipende da molti fattori. Ci saranno modifiche simultanee della stessa forma?Se la risposta è sì, non si dovrebbe creare un aggregato cluster più grande. Inoltre, il tuo caso d'uso è molto CRUD quindi dal tuo punto di vista dell'interfaccia utente presumo che tu abbia appena presentato tutti i campi modificabili per l'intero modulo e lo salvi come un intero documento. Tuttavia, se l'interfaccia utente era un po 'più segregata (ad esempio consentendo di modificare un singolo gruppo alla volta, o una singola sezione, ecc., Allora si trarrebbe vantaggio dall'avere più AR). – plalx