- 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:
Neste caso:
é 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:
Contém:
- Branch
- CompanySettings
- License
Responsabilidades:
- Gerenciar empresa
- Controlar filiais
- Controlar configurações
- Controlar licenciamento
User Aggregate¶
Raiz:
Contém:
- UserPreference
- UserCompany
- UserSession
Responsabilidades:
- Gerenciar cadastro
- Controlar preferências
- Controlar vínculos
- Controlar status
Role Aggregate¶
Raiz:
Contém:
- Permission
- RolePermission
- UserRole
Responsabilidades:
- Gerenciar papéis
- Controlar permissões
- Controlar escopo
Audit Aggregate¶
Raiz:
Responsabilidades:
- Registrar eventos
- Preservar imutabilidade
- Disponibilizar rastreabilidade
Notification Aggregate¶
Raiz:
Contém:
- NotificationTemplate
- NotificationAttempt
- NotificationDelivery
Responsabilidades:
- Controlar envio
- Controlar templates
- Controlar histórico
File Aggregate¶
Raiz:
Contém:
- FileVersion
- FileMetadata
- FilePermission
Responsabilidades:
- Gerenciar upload
- Controlar versões
- Controlar permissões
Agregados do CRM¶
Lead Aggregate¶
Raiz:
Contém:
- LeadSource
- LeadTag
- LeadActivity
Responsabilidades:
- Captar leads
- Qualificar leads
- Converter leads
Account Aggregate¶
Raiz:
Contém:
- Contact
- AccountAddress
- AccountDocument
Responsabilidades:
- Representar cliente
- Consolidar contatos
- Consolidar dados comerciais
Opportunity Aggregate¶
Raiz:
Contém:
- OpportunityStage
- OpportunityActivity
- Proposal
Responsabilidades:
- Gerenciar negociação
- Controlar pipeline
- Controlar propostas
Agregados do ERP¶
Product Aggregate¶
Raiz:
Contém:
- ProductVariant
- ProductPrice
- ProductStock
Responsabilidades:
- Gerenciar produtos
- Controlar variações
- Controlar precificação
Inventory Aggregate¶
Raiz:
Responsabilidades:
- Controlar entrada
- Controlar saída
- Controlar saldo
Agregados Financeiros¶
Payable Aggregate¶
Raiz:
Responsabilidades:
- Controlar contas a pagar
- Controlar vencimentos
- Controlar baixas
Receivable Aggregate¶
Raiz:
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:
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.