Lidar com agregados aninhados em DDD
-
18-09-2019 - |
Pergunta
Eu estou apenas começando no DDD, e eu estou tendo alguns problemas para descobrir como para acomodar a natureza relacional dos meus dados. Eu tenho o que eu acredito que seria considerado minha raiz agregada, mas o agregado também tem um agregado de seu próprio. Não querendo violar a Lei de Deméter, eu estou querendo saber se eu estou pensando sobre isso errado e estou esperando que algum perito DDD pode oferecer algum insight.
A minha raiz agregada é a minha Account
objeto, que tem um agregado de numerosas entidades AccountElement
, que são eles próprios agrupamentos lógicos de entidades ProductComponent
individuais.
Um fora AccountElement
do contexto de uma Account
não tem sentido, por isso estou confortável com a minha conclusão de que o objeto Account
é minha raiz agregada, e eu antecipo que entidade que tenha uma propriedade Elements
agregada. É a coleção ProductComponent
que tem me confundiu. Este agregado não tem nenhum significado fora de um AccountElement
, e realmente não tem nenhum significado fora de um Account
.
Eu não acho que eu deveria estar acessando objetos ProductComponent
individuais por pontilhando meu caminho para ele, como:
var reference = account.Elements(0).ProductComponents(0).ReferenceCode;
Mas, ao mesmo tempo que não faz sentido (a partir de uma perspectiva de domínio) para acessar um ProductComponent
diretamente de uma entidade Account
.
Eu tenho certeza que tudo isso é um pouco difícil de compreender sem o conhecimento do meu domínio, mas eu estou esperando é o suficiente para obter um bom feedback.
Solução
O artigo Robert ligada a é uma boa. Eu acrescentaria que, se ProductComponent só existe no contexto de AccountElement e AccountElement existe apenas no contexto da conta, em seguida, por extensão ProductComponent é no contexto da conta.