Ho problemi a definire i limiti aggregati (e forse anche la radice aggregata) per applicare la regola di coerenza transazionale. Vorrei prima descrivere il dominio del problema.
Nel nostro dominio abbiamo un progetto che contiene un piano preventivato , che a sua volta contiene centinaia di articoli da acquistare che devono essere acquistati . Alcuni di questi elementi sono selezionati per formare un compito di acquisto . Quando ciò si verifica, l'elemento deve essere spostato dal piano preventivato alla attività di acquisto . Il flusso dell'articolo è importante (deve essere controllato per una revisione successiva), quindi l'elemento deve essere un'entità e avere un identificatore.
Il mio attuale design avrebbe la attività di acquisto come radice aggregata e conoscerebbe tutti i suoi elementi. Sono propenso a lasciare il piano preventivato al di fuori di questo aggregato in quanto contiene molti articoli. Ma poi ho iniziato a dubitare di me stesso.
Vaughn Vernon descrive che un aggregato ben progettato dovrebbe essere "basato su vere regole di business che richiedono dati specifici per essere up- fino alla fine di una transazione di database di successo ". Nel mio scenario l'elemento di acquisto che viene spostato dal piano preventivato a una attività di acquisto designata deve essere rimosso dall'elenco degli elementi nel < em> piano preventivato . Ora, se il mio aggregato non include il piano preventivato e tutte le centinaia di articoli presenti, non posso applicare questa regola. Se lo includo, l'aggregato diventa più grande e dovrà caricare tutti gli piani preventivi (centinaia, forse migliaia) per la convalida per avere successo.
Poiché l'articolo di acquisto è anche un'entità che deve essere tracciabile e modificabile, penso che dovrebbe essere la sua radice aggregata. Quindi l'articolo dovrebbe essere referenziato solo dal suo ID sia dal piano preventivato che dall'attività di acquisto. È corretto?
La domanda principale è: come devo definire i miei confini e radici aggregate per poter applicare la regola di coerenza transazionale in questo dominio?