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 Search
ogni notte - Il
Batch Search
contiene un elenco diSearches
per esso. - Ogni
Search
contiene un elenco diMatches
ed è associato a unCustomer
Il processo
- Controlliamo ogni
Match
e lo contrassegno come confermato se si tratta di una corrispondenza confermata. - Selezioniamo anche una casella di controllo per ogni
Search
se tutto èMatches
dove 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é?