DEV Community

Cover image for Agregados (DDD)
Sandro Souza
Sandro Souza

Posted on • Updated on

Agregados (DDD)

Definição

  • É maneira de reduzir a complexidade técnica.
  • É um cluster de objetos de domínio que podem ser tratados como uma única unidade.
  • Não existe uma classe implementando um agregado.
  • Representa um conceito do domínio e não um container de itens.
  • Definir agregados é reversível e uma atividade continua.

Definir Agregados

  • Limites Transacionais
    • Definir a transações conforme a força dependência
  • Dependências
    • Definir tipos de relacionamentos (UML) e Força de dependência
  • Coleções
    • Quantidade de agregados equivale a numero de coleções em banco de dados NoSql
  • Pensando em Definições Técnicas
    • Definir um agregado é um processo continuo influenciado pelo feedback da sua implementação. "Persistência", "Consistência" e "Concorrência" são detalhes de implementação que podem ser difícil de acertar e pode fazer com que você repense seus limites de agregados.

Raiz do Agregado

  • Ponto de Entrada (Classe) para acesso ao agregado.

    • Fornece o nome conceitual do agregado.
  • Coordena todas as mudanças do agregado

    • Assegura que todos os clientes não definam o agregado para um estado inconsistente.

Performance

  • Agregados grandes pode degradar a performance.

    • Devido a quantidade de informações a serem carregadas e salvas.

Alt Text

Definição de Entidade

  • Surge "Substantivos" surgem as "Entidades"
  • Podem mudar ao longo do tempo (Utiliza ID)

Informações

  • Propriedade de navegação
    • O Id é uma propriedade para acessar informação

Recomendações

Refatorar Sempre

Definir agregados é uma atividade continua, não coloque sobre você a pressão para criar um definição de agregados perfeita na tentativa inicial. Quanto mais melhorias mais você saberá sobre o Domínio.

Transação

Se você precisa alterar mais de um agregado em uma transação, é um sinal que os limites do seu agregado possa ser melhor alinhado com o problema do domínio.

Interfaces com o Usuário

Agregados não devem ser planejados com base nas Interfaces com o Usuário (UIs).

Banco de Dados

Os associações do modelo de dados não pode influenciar as associações entre os objetos do domínio. Os objetos não são os mesmos como as tabelas do banco de dados. Modelos de dados representam um relacionamento de "Composição" para suportar integridade referencial e construir relatórios para BI (Business Intelligence).

Fatores Técnicos

Fatores técnicos afetam seus agregados principalmente "Performance" e "Escabilidade".

  • Se você está salvando ou carregando agregados acima das definições de performance pode representar que seu agregado está muito grande.

Referencias

Livro Patterns-Principles-Practices-Domain-Driven-Design

Agregados | DDD do jeito certo | Parte 06

DDD_Aggregate | Martin Fowler

Domain model purity and lazy loading.)

Top comments (0)