Pular para conteúdo
  • 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

Application Service



Domain Service



Aggregates



Repositories

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.