Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

01 - Domínio e Subdomínios

#core-domain#ddd#strategic-design#subdominios
video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Domínio e Subdomínios

O domínio é a área do negócio para a qual o software existe, o conjunto de atividades, regras e
conhecimentos que geram valor para a organização. Em um e-commerce, o domínio cobre catálogo,
pedidos, pagamentos e logística; em um banco, cobre contas, crédito, risco e compliance.
Domain-Driven Design parte do princípio de que o retorno do software vem da fidelidade com que ele
modela esse domínio, e não da sofisticação da stack. Como negócios reais são grandes demais para
caber em um único modelo coerente, o DDD decompõe o domínio em subdomínios, fatias do negócio com
responsabilidade e nível de importância próprios. Essa decomposição é a primeira decisão
estratégica do projeto, porque define onde investir talento escasso e onde é aceitável comprar
solução pronta. Em produção, classificar mal esses subdomínios custa caro: times seniores alocados
em software commodity e modelos genéricos aplicados onde a empresa realmente se diferencia.

Domínio como área do negócio

O domínio vive no espaço do problema, não no espaço da solução. Ele existiria mesmo sem software:
um banco opera crédito e risco com ou sem sistema, e o software apenas automatiza e amplia essa
operação. Essa distinção importa porque a conversa com especialistas acontece no vocabulário do
negócio, enquanto a arquitetura técnica é apenas o meio de expressá-la. O arquiteto que confunde os
dois espaços desenha módulos em volta de tecnologias, como pastas genéricas de controllers e
services que atravessam todo o negócio, em vez de desenhar em volta de pedidos, crédito e
sinistros. A pergunta que abre o trabalho não é "quais frameworks usaremos", e sim "quais partes do
negócio este sistema atende". A resposta delimita o escopo do modelo e evita que o sistema se torne
um amontoado de funções sem fronteira.

Por que decompor em subdomínios

Um domínio inteiro, como o de um marketplace, contém dezenas de áreas com níveis de complexidade e
de importância muito diferentes. Tentar modelar tudo em um único modelo corporativo produz um
modelo gigante que ninguém domina por completo e que quebra a cada mudança local. Subdomínios
existem para reduzir essa carga cognitiva: cada fatia tem vocabulário próprio, especialistas
próprios e uma fronteira onde o modelo faz sentido. A decomposição também dialoga com a lei de
Conway, pois times entregam a arquitetura que espelha a estrutura da organização, e subdomínios bem
desenhados viram candidatos naturais a times e a serviços. Na prática, a pergunta operacional é
simples: onde termina a responsabilidade de um grupo de pessoas e começa a de outro. Essa fronteira
organizacional, validada com o negócio, é o candidato mais confiável a subdomínio.

Subdomínio central (core domain)

O core domain é a parte do negócio em que a empresa se diferencia da concorrência e onde o software
cria vantagem competitiva. É a área que justifica a existência do produto: o motor de precificação
dinâmica de um varejista, o algoritmo de concessão de crédito de um banco digital, o sistema de
matching de um aplicativo de mobilidade. Ele merece os melhores talentos, atenção de arquitetura
sênior e investimento pesado em testes e observabilidade, porque um defeito aqui tem impacto direto
em receita. Uma característica importante é que o core domain raramente é comprado pronto: se
qualquer concorrente pode adquirir a mesma solução, aquilo não diferencia ninguém. Identificar o
core domain exige conversa com a liderança e não é um trabalho estático, pois a vantagem competitiva
se move conforme o mercado amadurece.

Subdomínios de suporte (supporting subdomain)

Os subdomínios de suporte existem para viabilizar o core domain, mas não são a fonte de
diferenciação. No e-commerce, o cadastro de clientes e o fluxo de devoluções sustentam a operação,
porém nenhum cliente escolhe a loja por causa deles. A complexidade costuma ser moderada, com
regras próprias que variam entre empresas, o que impede a compra direta de prateleira. A estratégia
usual é construir com esforço controlado, frequentemente com times menores ou equipes
generalistas, e aceitar soluções mais simples do que as que o core receberia. O risco clássico é o
oposto do core: subestimar um supporting que cresceu em importância e continuar tratando-o como
atividade secundária enquanto ele já virou gargalo de produção. A revisão periódica da classificação
evita esse descolamento.

Subdomínios genéricos (generic subdomain)

Subdomínios genéricos são iguais em praticamente qualquer empresa do setor, ou até entre setores
diferentes. Autenticação, envio de e-mail, emissão de notas fiscais padronizadas e gestão de
permissões são exemplos típicos. Ninguém vence concorrência por ter um CRUD de usuários melhor, e a
existência de produtos maduros no mercado torna escrever esse código do zero um custo sem retorno.
A estratégia recomendada é comprar ou adotar open source, integrando por uma borda estreita, o que
reduz manutenção e tempo de chegada ao mercado. A ressalva de produção é escolher bem o ponto de
integração: um produto comprado mal isolado contamina o modelo do core com conceitos externos. O
ideal é colocar uma camada fina de tradução na borda, para que o vocabulário interno permaneça o do
negócio.

Exemplos de classificação em e-commerce e banking

A tabela a seguir compara os três tipos de subdomínio com critérios objetivos e exemplos reais dos
dois setores mais usados no estudo de DDD.

Critério Core domain Supporting subdomain Generic subdomain
Diferenciação competitiva Alta, é a razão do produto Baixa, viabiliza o core Nenhuma, é commodity
Complexidade do modelo Alta e específica da empresa Moderada, com regras próprias Baixa, já resolvida pelo mercado
Estratégia de obtenção Construir internamente Construir com esforço controlado Comprar ou adotar open source
Talento alocado Time sênior dedicado Time pequeno ou generalista Terceirizado ou produto pronto
Exemplo em e-commerce Motor de recomendação e precificação Gestão de devoluções Autenticação e envio de e-mail
Exemplo em banking Motor de análise de crédito Onboarding de clientes Notificações push e emissão de boletos

Note que a mesma função pode mudar de classe entre empresas. Logística é commodity para um
marketplace de produtos digitais e é core para uma transportadora, porque é exatamente nela que a
transportadora compete. A classificação é sempre relativa ao negócio da organização, nunca absoluta
ao sistema.

Mapeamento de subdomínio para time e serviço

Depois de classificar, o arquiteto traduz subdomínios em unidades de organização e de entrega. O
mapeamento mais saudável, quando o tamanho da empresa permite, é um time por subdomínio central e
grande, e times compartilhados para subdomínios menores, sempre com um responsável claro por cada
fatia. No código, cada subdomínio vira um módulo com pacote próprio, e em ambientes de
microsserviços vira um serviço ou um conjunto coeso de serviços. O código a seguir ilustra a
organização de módulos por subdomínio em um monólito modular de e-commerce, que é o ponto de
partida recomendado antes de qualquer extração para serviços.

ecommerce/
  precificacao/            # core domain: regras de preço e promoção
    dominio/
    aplicacao/
    infraestrutura/
  pedidos/                 # supporting: sustenta o funil de vendas
    dominio/
    aplicacao/
    infraestrutura/
  autenticacao/            # generic: commodity, candidato a produto pronto
    adaptador/             # borda estreita com o fornecedor externo

A regra de dependência é que módulos de suporte e genéricos podem depender de contratos publicados
pelo core, mas nunca o contrário. Se o módulo de precificação começa a importar classes de
autenticação, a fronteira quebrou e a extração futura de serviços ficará mais cara. Essa disciplina
de dependência, fiscalizada em revisão de código ou com ferramentas de análise estática, é o que
mantém o mapeamento vivo na base de código e não apenas em slides.

Revisando a classificação ao longo do tempo

Subdomínios não são gravados em pedra, pois a vantagem competitiva se desloca conforme o mercado e a
maturidade da empresa. Uma esteira de logística que era supporting pode virar core quando a empresa
passa a prometer entrega em horas como diferencial. Um sistema genérico comprado pode precisar de
internalização quando o fornecedor encerra o produto. Em revisões trimestrais de arquitetura, vale
perguntar três coisas: onde o negócio pretende competir no próximo ano, quais subdomínios geraram
incidentes com impacto em receita e onde o time sente que o modelo atual não dá conta. As respostas
realocam talento e ajustam fronteiras antes que o desalinhamento chegue à produção.

Erros comuns e boas práticas

  • Tratar o sistema inteiro como core domain, sem hierarquia de importância. Isso dilui investimento
    e impede decisões de compra, pois tudo passa a parecer indispensável.
  • Classificar pela dificuldade técnica, e não pelo que diferencia o negócio. Complexidade técnica
    alta em uma área commodity não a torna core.
  • Mapear subdomínios para camadas técnicas, como um serviço só de validação ou só de persistência.
    Subdomínio é fatia vertical do negócio, com dados e comportamento juntos.
  • Comprar um produto para o core domain por pressão de prazo. A diferenciação fica nas mãos de um
    fornecedor e o custo de mudança cresce sem retorno.
  • Congelar a classificação do primeiro workshop e nunca revisá-la. Revisões periódicas mantêm o
    investimento alinhado à estratégia real da empresa.
  • Distribuir um subdomínio entre vários times sem dono claro. Fronteira sem dono vira terra de
    ninguém em incidentes e acumula código órfão.
Sintoma em produção Causa provável Mitigação
Time sênior gasta sprint inteira em cadastro de usuários Subdomínio genérico tratado como core Adotar produto pronto e realocar o time
Regra de negócio duplicada em três serviços Fronteira de subdomínio mal delimitada Consolidar responsabilidade e publicar contrato único
Mudança de estratégia demora meses para chegar ao código Core domain subfinanciado e sem dono Elevar a área a core e dedicar time estável
Incidente sem dono claro na esteira de devoluções Subdomínio compartilhado entre times sem responsável Nomear responsável e formalizar SLA interno