In DDD l'aggregato dovrebbe rappresentare il limite della transazione. Una transazione che richiede il coinvolgimento di più di un aggregato è spesso un segno che il modello dovrebbe essere perfezionato, o i requisiti transazionali dovrebbero essere rivisti, o entrambi.Istanze multiple Istanze radice per transazione
Significa che il limite della transazione è per radice ISTANTA aggregata o per aggregato?
Dire che ho una radice aggregata chiamata "Nodo", all'interno di ogni "Nodo" ho una collezione di "Campi (oggetti valore)". Ogni "campo" è di tipo e può essere di tipo "nodo". Nel mio caso, se è di tipo "Nodo", memorizzerò l'ID sul root di aggregazione "Nodo".
Node (AggregateRootID 1)
---> Field1 : String (John)
---> Field2 : String (Doe)
---> Field3 : Node (AggregateRootID 2)
Node (AggregateRootID 2)
--> Field1 : String (Jane)
--> Field2 : String (Doe)
Se si dispone di una transazione che aggiorna entrambe le istanze di Radice di aggregazione, è valida?
O significa che se ho aggregato "Nodo" e aggregato "Elemento" che non posso aggiornarli entrambi in una transazione?
Questo è parzialmente errato, AR sono i limiti di consistenza, ma anche AR sono i limiti transazionali. Consentendo la modifica di più di un aggregato per transazione, aumenterai il rischio di false eccezioni di concorrenza fino al punto in cui il sistema potrebbe diventare inutilizzabile. Tuttavia, è possibile creare più AR per transazione. – plalx
Quindi stai dicendo che è anche parzialmente corretto? :) Uno non dovrebbe imbattersi nello scenario troppo spesso e potrebbe benissimo indicare un problema di progettazione e potrebbero esserci diversi modi per aggirarlo. Prendi il trasferimento di denaro tra due account. Se un account è un AR, probabilmente vorrai essere coerente al 100%. Tuttavia, nel mondo reale c'è raramente il controllo su entrambi i conti, quindi la coerenza finale dovrà essere sufficiente. Ad ogni modo, sono d'accordo sul fatto che si dovrebbe cercare di evitare questi scenari se possibile. –