Come devo eseguire aggiornamenti su figli nidificati di una radice aggregata?
Dovrei trovare l'oggetto figlio attraversando le associazioni ed eseguire direttamente l'aggiornamento su di esso, o dovrei aggiungere un metodo alla radice di aggregazione che si occupa di esso?
Un esempio
Sto modellando un vecchio progetto nella nostra azienda che è un sistema che utilizziamo per eseguire ricerche di clienti contro un elenco di persone sospette:
Il modello
- Eseguiamo un
Batch Searchogni notte - Il
Batch Searchcontiene un elenco diSearchesper esso. - Ogni
Searchcontiene un elenco diMatchesed è associato a unCustomer
Il processo
- Controlliamo ogni
Matche lo contrassegno come confermato se si tratta di una corrispondenza confermata. - Selezioniamo anche una casella di controllo per ogni
Searchse tutto èMatchesdove ispezionato
L'avvertenza
Anche un Search può essere eseguito standalone, come in - non fa parte di Batch Search . In tal caso, Search diventa naturalmente la radice di aggregazione.
Domanda
How should I be performing the update operations on the child items? The blue book states that all updates to children must go through the Aggregate Root.
Ci sono 2 modi per eseguire questo aggiornamento:
Opzione 1
Attraversa il grafico e trova l'oggetto figlio ed esegui direttamente l'operazione su di esso.
batchSearch = batchSearchRepo.find(1);
search = batchSearch.findSearch(5);
match = search.getMatch(3);
match.markConfirmed();
batchSearchRepo.save(batchSearch);
Opzione 2
Aggiungi un metodo su Aggregate Root
batchSearch = batchSearchRepo.find(1);
search = batchSearch.markSearchMatchAsConfirmed(5, 3);
batchSearchRepo.save(batchSearch);
Quale dei 2 metodi di aggiornamento è più appropriato e perché?