Pular para conteúdo
  • Marcelo Areco reviewers: [] created: 2026-07-02 updated: 2026-07-02 tags:
  • ddd
  • aggregates
  • domain-model

Aggregates

Objetivo

Definir o padrão oficial para modelagem de Agregados na CoreFlow Platform.

Agregados representam grupos consistentes de entidades e objetos de valor que devem ser tratados como uma unidade transacional.


Conceito

Um Aggregate é um limite de consistência.

Ele define:

  • quais entidades pertencem ao mesmo ciclo transacional;
  • qual objeto controla as regras;
  • quais invariantes devem ser preservadas;
  • qual entidade é a raiz do agregado.

Aggregate Root

Todo agregado possui uma raiz.

A raiz é a única entidade que pode ser acessada diretamente por outros objetos.

Exemplo:

Company
 ├── Branch
 ├── CompanySettings
 └── License

Neste caso:

Company

é a raiz do agregado.


Regras

Todo agregado deverá:

  • possuir uma única raiz;
  • proteger suas invariantes;
  • evitar exposição direta de entidades internas;
  • ser carregado por Repository;
  • publicar Domain Events quando aplicável.

Agregados do Core

Company Aggregate

Raiz:

Company

Contém:

  • Branch
  • CompanySettings
  • License

Responsabilidades:

  • Gerenciar empresa
  • Controlar filiais
  • Controlar configurações
  • Controlar licenciamento

User Aggregate

Raiz:

User

Contém:

  • UserPreference
  • UserCompany
  • UserSession

Responsabilidades:

  • Gerenciar cadastro
  • Controlar preferências
  • Controlar vínculos
  • Controlar status

Role Aggregate

Raiz:

Role

Contém:

  • Permission
  • RolePermission
  • UserRole

Responsabilidades:

  • Gerenciar papéis
  • Controlar permissões
  • Controlar escopo

Audit Aggregate

Raiz:

AuditEvent

Responsabilidades:

  • Registrar eventos
  • Preservar imutabilidade
  • Disponibilizar rastreabilidade

Notification Aggregate

Raiz:

Notification

Contém:

  • NotificationTemplate
  • NotificationAttempt
  • NotificationDelivery

Responsabilidades:

  • Controlar envio
  • Controlar templates
  • Controlar histórico

File Aggregate

Raiz:

File

Contém:

  • FileVersion
  • FileMetadata
  • FilePermission

Responsabilidades:

  • Gerenciar upload
  • Controlar versões
  • Controlar permissões

Agregados do CRM

Lead Aggregate

Raiz:

Lead

Contém:

  • LeadSource
  • LeadTag
  • LeadActivity

Responsabilidades:

  • Captar leads
  • Qualificar leads
  • Converter leads

Account Aggregate

Raiz:

Account

Contém:

  • Contact
  • AccountAddress
  • AccountDocument

Responsabilidades:

  • Representar cliente
  • Consolidar contatos
  • Consolidar dados comerciais

Opportunity Aggregate

Raiz:

Opportunity

Contém:

  • OpportunityStage
  • OpportunityActivity
  • Proposal

Responsabilidades:

  • Gerenciar negociação
  • Controlar pipeline
  • Controlar propostas

Agregados do ERP

Product Aggregate

Raiz:

Product

Contém:

  • ProductVariant
  • ProductPrice
  • ProductStock

Responsabilidades:

  • Gerenciar produtos
  • Controlar variações
  • Controlar precificação

Inventory Aggregate

Raiz:

InventoryMovement

Responsabilidades:

  • Controlar entrada
  • Controlar saída
  • Controlar saldo

Agregados Financeiros

Payable Aggregate

Raiz:

Payable

Responsabilidades:

  • Controlar contas a pagar
  • Controlar vencimentos
  • Controlar baixas

Receivable Aggregate

Raiz:

Receivable

Responsabilidades:

  • Controlar contas a receber
  • Controlar recebimentos
  • Controlar inadimplência

Diagrama Geral

flowchart TD

Company --> Branch
Company --> CompanySettings
Company --> License

User --> UserPreference
User --> UserCompany
User --> UserSession

Role --> Permission

Lead --> LeadActivity
Account --> Contact
Opportunity --> Proposal

Product --> ProductVariant
Product --> ProductStock

Payable --> Payment
Receivable --> Receipt

Regras de Consistência

Um agregado deverá garantir suas próprias invariantes.

Exemplos:

  • Uma empresa deve possuir pelo menos um administrador.
  • Um usuário não pode autenticar se estiver bloqueado.
  • Uma oportunidade não pode ser fechada sem uma etapa válida.
  • Uma conta a receber não pode ser baixada duas vezes.

Persistência

Cada agregado deverá possuir um Repository próprio.

Exemplo:

CompanyRepository
UserRepository
OpportunityRepository

Eventos

Agregados podem publicar Domain Events.

Exemplos:

  • CompanyCreated
  • UserBlocked
  • LeadQualified
  • OpportunityWon
  • PaymentReceived

Anti-patterns

É proibido:

  • Agregado gigante
  • Entidades internas acessadas diretamente
  • Regras de negócio fora da raiz
  • Transações atravessando múltiplos agregados sem evento
  • Compartilhar entidades entre contextos

Objetivo Final

Garantir que a CoreFlow Platform possua um modelo de domínio consistente, expressivo, protegido por invariantes e preparado para evolução sustentável dos produtos.