Trattare con aggregati nidificati in DDD
-
18-09-2019 - |
Domanda
Sono appena agli inizi a DDD, e sto avendo qualche difficoltà a capire come per accogliere la natura relazionale dei dati. Ho quello che credo potrebbe essere considerato la mia radice di aggregazione, ma l'aggregato ha anche un aggregato a sé stante. Non volendo violare la Legge di Demetra, mi chiedo se sto pensando a questo sbagliato e sto sperando che qualche esperto DDD in grado di offrire una certa comprensione.
La mia radice di aggregazione è il mio oggetto Account
, che ha un aggregato di numerose entità AccountElement
, che sono essi stessi raggruppamenti logici di singole entità ProductComponent
.
Un AccountElement
al di fuori del contesto di un Account
non ha alcun significato, quindi sono bene con la mia conclusione che l'oggetto Account
è la mia radice di aggregazione, e vi anticipo che entità avente una proprietà Elements
aggregato. E 'la collezione ProductComponent
che mi ha confuso. Tale aggregato ha alcun significato al di fuori di un AccountElement
, e davvero non ha senso al di fuori di un Account
.
Non credo che dovrei accederanno i singoli oggetti ProductComponent
da punteggiano il mio modo di esso, come:
var reference = account.Elements(0).ProductComponents(0).ReferenceCode;
Ma allo stesso tempo non ha senso (dal punto di vista di dominio) per accedere a un ProductComponent
direttamente da un'entità Account
.
Sono sicuro che tutto questo è un po 'difficile da comprendere senza la conoscenza del mio dominio, ma spero che sia sufficiente per ottenere qualche buon feedback.
Soluzione
L'articolo Robert legato a è un buon compromesso. Vorrei aggiungere che se ProductComponent esiste solo nel contesto di AccountElement e AccountElement esiste solo nel contesto di account, quindi per estensione ProductComponent è nel contesto di account.