Estou tentando entender como usar corretamente o padrão de repositório. O conceito central de uma raiz agregada continua aparecendo. Ao pesquisar na Web e no Stack Overflow para obter ajuda com o que é uma raiz agregada, continuo encontrando discussões sobre eles e links inativos para páginas que deveriam conter definições básicas.
No contexto do padrão do repositório, o que é uma raiz agregada?
Respostas:
No contexto do padrão do repositório, as raízes agregadas são os únicos objetos que o código do cliente carrega do repositório.
O repositório encapsula o acesso a objetos filho - da perspectiva de um chamador, ele os carrega automaticamente, ao mesmo tempo em que a raiz é carregada ou quando eles são realmente necessários (como no carregamento lento).
Por exemplo, você pode ter um
Order
objeto que encapsule operações em váriosLineItem
objetos. Seu código de cliente nunca carregaria osLineItem
objetos diretamente, apenas oOrder
que os contém, que seria a raiz agregada para essa parte do seu domínio.fonte
Partida Evans DDD:
E:
Isso significa que as raízes agregadas são os únicos objetos que podem ser carregados de um repositório.
Um exemplo é um modelo que contém uma
Customer
entidade e umaAddress
entidade. Nunca acessaríamos umaAddress
entidade diretamente do modelo, pois não faz sentido sem o contexto de um associadoCustomer
. Então poderíamos dizer queCustomer
eAddress
juntos formam um agregado e queCustomer
é uma raiz agregada.fonte
Each AGGREGATE has a root
eThe root is the only *member* of the AGGREGATE
- esse verbage implica que a raiz é propriedade no agregado. Mas em todos os exemplos, é o contrário: a raiz contém propriedades que são agregadas. Você pode esclarecer?Customer
classe é considerada a raiz agregada ouCustomer
instâncias ?Raiz agregada é um nome complexo para uma ideia simples.
Ideia geral
Um diagrama de classes bem projetado encapsula seus elementos internos. O ponto através do qual você acessa essa estrutura é chamado
aggregate root
.As partes internas da sua solução podem ser muito complicadas, mas o usuário dessa hierarquia apenas usará
root.doSomethingWhichHasBusinessMeaning()
.Exemplo
Verifique esta hierarquia de classes simples
Como você quer andar de carro? Escolha melhor API
Opção A (de alguma forma funciona):
Opção B (o usuário tem acesso à classe interna):
Se você acha que a opção A é melhor, parabéns. Você fica com o principal motivo por trás
aggregate root
.A raiz agregada encapsula várias classes. você pode manipular toda a hierarquia apenas através do objeto principal.
fonte
car
raiz agregada. Você também pode permitir situações como uma no desenho. A solução correta depende do modelo de negócios do aplicativo. Pode ser diferente em cada caso.Imagine que você tem uma entidade de computador, essa entidade também não pode viver sem sua entidade de software e de hardware. Estes formam o
Computer
agregado, o mini-ecossistema da parte Computer do domínio.A Raiz Agregada é a entidade da mãe-mãe dentro do agregado (no nosso caso
Computer
), é uma prática comum que seu repositório funcione apenas com as entidades que são Raízes Agregadas, e essa entidade é responsável por inicializar as outras entidades.Considere a raiz agregada como um ponto de entrada para um agregado.
No código C #:
Lembre-se de que o hardware provavelmente também seria um ValueObject (não possui identidade por conta própria), considere-o apenas como um exemplo.
fonte
where T : IAggregateRoot
- Este fez o meu diaSe você seguir uma abordagem baseada no primeiro banco de dados, a raiz agregada geralmente será a tabela no lado 1 de um relacionamento 1-many.
O exemplo mais comum é uma pessoa. Cada pessoa tem muitos endereços, um ou mais recibos de pagamento, faturas, entradas de CRM, etc. Nem sempre é o caso, mas 9/10 vezes.
No momento, estamos trabalhando em uma plataforma de comércio eletrônico e basicamente temos duas raízes agregadas:
Os clientes fornecem informações de contato, atribuímos transações a eles, as transações obtêm itens de linha etc.
Os vendedores vendem produtos, têm pessoas de contato, páginas sobre nós, ofertas especiais etc.
Eles são tratados pelo repositório Customer e Seller, respectivamente.
fonte
Dinah:
No contexto de um repositório, a raiz agregada é uma entidade sem entidade pai. Ele contém zero, uma ou muitas entidades filhas cuja existência depende do pai para sua identidade. Esse é um relacionamento Um para Muitos em um Repositório. Essas entidades filhas são agregados simples.
fonte
De um link quebrado :
Dentro de um agregado, há uma raiz agregada. A Raiz Agregada é a Entidade pai de todas as outras Entidades e Objetos de Valor no Agregado.
Um Repositório opera com uma Raiz Agregada.
Mais informações também podem ser encontradas aqui .
fonte
Agregar significa coleção de algo.
root é como o nó superior da árvore, de onde podemos acessar tudo como o
<html>
nó no documento da página da web.Analogia do blog, um usuário pode ter muitas postagens e cada postagem pode ter muitos comentários. portanto, se buscarmos qualquer usuário, ele poderá atuar como root para acessar todas as postagens relacionadas e comentários adicionais dessas postagens. Todos esses itens são considerados coletados ou agregados.
fonte
Agregado é onde você protege seus invariantes e força a consistência, limitando seu acesso à raiz agregada. Não se esqueça, o agregado deve projetar as regras de negócios e invariantes do seu projeto, não o relacionamento com o banco de dados. você não deve injetar nenhum repositório e nenhuma consulta não é permitida.
fonte
Em Erlang, não há necessidade de diferenciar entre agregados, uma vez que o agregado é composto por estruturas de dados dentro do estado, em vez da composição de OO. Veja um exemplo: https://github.com/bryanhunter/cqrs-with-erlang/tree/ndc-london
fonte