- Marcelo Areco reviewers: [] created: 2026-07-02 updated: 2026-07-02 tags:
- ddd
- domain-services
- services
Domain Services¶
Objetivo¶
Definir o padrão oficial para implementação de Serviços de Domínio (Domain Services) na CoreFlow Platform.
Os Domain Services encapsulam regras de negócio que não pertencem naturalmente a uma Entidade ou Aggregate específico.
Seu propósito é manter o domínio coeso, evitando duplicação de regras e preservando a responsabilidade de cada objeto.
Conceito¶
Um Domain Service representa uma operação relevante do domínio.
Ele não possui estado próprio e atua sobre Entidades, Aggregates e Value Objects.
Características¶
Todo Domain Service deverá:
- representar uma operação do domínio;
- ser stateless;
- possuir uma única responsabilidade;
- utilizar linguagem ubíqua;
- depender apenas de abstrações do domínio.
Quando Utilizar¶
Utilize um Domain Service quando:
- a regra envolver múltiplos Aggregates;
- a operação não pertencer claramente a uma Entidade;
- houver necessidade de reutilização da regra.
Quando Não Utilizar¶
Não utilizar quando:
- a lógica pertence claramente a uma Entidade;
- a lógica pertence ao Aggregate Root;
- trata-se apenas de persistência;
- trata-se apenas de infraestrutura.
Arquitetura¶
Exemplos¶
CRM¶
LeadQualificationService¶
Responsabilidades:
- validar critérios de qualificação;
- alterar estágio;
- publicar eventos.
OpportunityClosingService¶
Responsabilidades:
- validar regras comerciais;
- encerrar negociação;
- gerar eventos.
ERP¶
InventoryReservationService¶
Responsabilidades:
- reservar estoque;
- validar disponibilidade;
- registrar movimentações.
FiscalCalculationService¶
Responsabilidades:
- calcular tributos;
- validar regras fiscais;
- produzir valores fiscais.
Finance¶
PaymentSettlementService¶
Responsabilidades:
- liquidar títulos;
- calcular juros;
- calcular multas;
- gerar baixa financeira.
RH¶
PayrollProcessingService¶
Responsabilidades:
- calcular folha;
- validar benefícios;
- gerar eventos.
Dependências¶
Os Domain Services poderão utilizar:
- Repositories
- Aggregates
- Value Objects
- Domain Events
Nunca deverão depender diretamente de:
- Django ORM
- PostgreSQL
- APIs externas
- Frameworks
Publicação de Eventos¶
Quando necessário, um Domain Service poderá solicitar que um Aggregate publique Domain Events.
A publicação deverá ocorrer sempre através do Aggregate Root.
Nomeação¶
Sempre utilizar nomes orientados ao negócio.
Exemplos:
LeadQualificationService
OpportunityClosingService
InventoryReservationService
PayrollProcessingService
Evitar nomes técnicos.
Testabilidade¶
Todo Domain Service deverá permitir testes unitários independentes da infraestrutura.
Utilizar:
- Mock
- Fake Repository
- InMemory Repository
Diagrama¶
flowchart TD
ApplicationService
↓
LeadQualificationService
↓
Lead Aggregate
↓
LeadRepository
↓
PostgreSQL
Regras¶
Domain Services:
- não persistem diretamente;
- não executam SQL;
- não acessam Controllers;
- não conhecem APIs REST;
- não conhecem infraestrutura.
Anti-patterns¶
É proibido:
- Services gigantes;
- lógica de domínio em Controllers;
- lógica de domínio em Views;
- lógica de domínio em Serializers;
- lógica de domínio em Repositories;
- dependência direta do ORM.
Objetivo Final¶
Disponibilizar uma camada de Serviços de Domínio consistente, reutilizável e desacoplada, permitindo implementar regras complexas preservando os princípios de Domain-Driven Design, Clean Architecture e alta coesão da CoreFlow Platform.