Domain Model¶
Objetivo¶
Consolidar num único diagrama os padrões táticos de DDD já documentados individualmente — Aggregates, Entities, Value Objects e Domain Events — mostrando como se relacionam.
Diagrama consolidado¶
flowchart TD
BC["Bounded Context"] --> Agg["Aggregate"]
Agg --> Root["Aggregate Root\n(entidade)"]
Root --> Ent["Entities\n(dentro do agregado)"]
Root --> VO["Value Objects"]
Root -->|dispara| Event["Domain Events"]
Event --> Other["Outro Bounded Context\n(via evento/integração)"]
Repo["Repository"] -->|carrega/persiste| Root
Svc["Domain Service"] -->|orquestra regra entre agregados| Root
Exemplo concreto — CoreFlow CRM¶
Aplicando o modelo ao domínio comercial do CRM (ver Aggregates):
| Padrão | Exemplo real |
|---|---|
| Aggregate Root | Oportunidade |
| Entities do agregado | HistoricoEtapaOportunidade |
| Domain Event (implícito) | Mudança de etapa do pipeline, registrada como histórico |
| Repository | Acesso via Django ORM (Oportunidade.objects) |
| Domain Service | services.py do app oportunidades |
Prática real vs. modelo tático¶
Como registrado em ADR-0003, os produtos reais não implementam esses conceitos como classes/camadas explícitas de código — o app Django já cumpre o papel de bounded context, o model Django já cumpre o papel de aggregate root, e a "linguagem ubíqua" existe de forma informal nos nomes de models e campos em português. Este documento descreve o vocabulário e a relação conceitual entre os padrões, útil para discutir domínio — não uma estrutura de pastas a ser criada no código.