Pular para o conteúdo principal

ADRavançado

ADR-005 — Adotar Portas e Adaptadores nos Módulos de Domínio

Exemplo didático

Último dos cinco ADRs do sistema fictício Verano. Este exemplo mostra escopo estreito declarado e discordância registrada.

Statusaceito em 2026-01-15
SistemaVerano — plataforma de pedidos
Autoresequipe de plataforma
Decisorescomitê técnico da plataforma
Consultadosos cinco times de produto

Contexto

Três anos depois do ADR-001, o monólito modular continua sendo a estrutura da Verano, e continua sustentando o negócio. Mas duas pressões apareceram.

Extração. O módulo de entrega passou a ter perfil de carga muito diferente do resto — picos concentrados em duas janelas do dia, com necessidade de escala independente. A condição "módulo isolado exigindo capacidade acima de 3× a dos demais", registrada como sinal de alerta no ADR-001, foi atingida em novembro de 2025.

Substituição de infraestrutura. Nos últimos 18 meses trocamos o provedor de pagamento, o de notificação por mensagem e o de geolocalização. Cada troca levou entre 6 e 11 semanas, e a medição de onde o tempo foi gasto mostrou o padrão:

lógica de negócio tocada em cada troca entre 40 e 70 arquivos
lógica que precisaria mudar de verdade ~0
tempo em adaptação de chamadas espalhadas ~70% do esforço

Situação em janeiro de 2026:

módulos 7 (catálogo, carrinho, pedido, pagamento,
entrega, notificação, antifraude)
engenheiros 38, em 5 times
módulos com lógica de
domínio substantiva 3 — pedido, entrega, antifraude
módulos majoritariamente
de integração ou consulta 4

Restrições:

  • Não temos capacidade para reescrever sete módulos. Qualquer mudança precisa ser incremental.
  • A equipe está distribuída entre cinco times com autonomia; uma decisão que exija reaprendizado em todos custa caro.

O que não sabíamos: se o módulo de entrega seria de fato extraído, ou se a escala independente poderia ser resolvida sem extração.

Decisão

Vamos adotar portas e adaptadores nos três módulos com lógica de domínio substantiva — pedido, entrega e antifraude.

Nesses módulos, a lógica de domínio passa a depender apenas de interfaces declaradas por ela mesma. Banco, provedores externos, mensageria e transporte entram como adaptadores.

Não vamos aplicar o padrão aos quatro módulos restantes — catálogo, carrinho, notificação e pagamento continuam com acesso direto a banco e a clientes de integração. Nos módulos que são essencialmente integração ou consulta, a inversão acrescentaria camada sem lógica para proteger.

Não vamos reescrever os três módulos de uma vez: a adoção é incremental, aplicada ao código novo e às áreas tocadas por mudança, com prazo de 12 meses.

Alternativas Consideradas

Aplicar a todos os sete módulos. Descartada porque quatro deles não têm lógica de domínio a isolar — a camada adicional seria custo sem retorno, e o padrão perderia credibilidade justamente onde ele importa.

Voltaria a ganhar se: algum desses quatro desenvolver lógica de domínio própria. Catálogo é o candidato mais provável, com as regras de precificação no roteiro.

Não adotar; extrair o módulo de entrega diretamente. Descartada porque a extração sem isolamento prévio exigiria desemaranhar as dependências durante a extração — que é o momento de maior risco. Fazer o isolamento antes permite extrair depois com o domínio já independente.

Voltaria a ganhar se: a extração fosse urgente e a lógica do módulo já fosse isolada.

Anti-corruption layer apenas nas integrações externas, sem inverter as dependências de persistência. Descartada como insuficiente para o objetivo de extração — o acoplamento ao banco é o que mais dificulta separar um módulo. Mas foi adotada como passo intermediário nos três módulos, por ser mais barata e dar resultado antes.

Consequências

Positivas (curto prazo). Trocas de provedor passam a tocar apenas o adaptador. Com base nas três trocas anteriores, estimamos redução de 6–11 semanas para 2–3.

Positivas (longo prazo). O módulo de entrega fica extraível sem desemaranhar dependências. Testes de domínio deixam de exigir banco.

Negativas (imediatas). Mais interfaces e mais arquivos. Navegar do endpoint até a regra passa por uma indireção a mais, o que incomoda especialmente quem está chegando.

Negativas (longo prazo). Dois estilos convivendo na mesma base de código, por decisão deliberada. Isso exige que o critério seja conhecido, ou vira inconsistência aparente.

Neutras. Um documento curto explicando o critério de aplicação passa a ser necessário na integração de pessoas novas.

Risco aceito. O padrão pode vazar para os quatro módulos por imitação, sem o critério. Vamos verificar isso nas revisões de código.

Discordância Registrada

Três engenheiros, de dois times, defenderam aplicar o padrão a todos os sete módulos. O argumento: dois estilos na mesma base de código produzem confusão maior que o custo da camada extra, e o critério "tem lógica de domínio substantiva" é subjetivo o bastante para gerar discussão a cada módulo novo.

A decisão foi tomada aceitando esse risco, com duas mitigações: o critério foi escrito explicitamente no guia de contribuição, e a questão será reavaliada em 12 meses com base em quantas discussões sobre "este módulo se aplica?" tiverem ocorrido.

Sinal de Alerta

  • Mais de cinco discussões em 12 meses sobre se um módulo se enquadra no critério.
  • Tempo médio de troca de provedor acima de 4 semanas após a adoção.
  • Qualquer um dos quatro módulos excluídos adotando o padrão sem decisão registrada.
  • Reclamação recorrente de pessoas novas sobre navegabilidade nos três módulos.

O que observar neste exemplo

O escopo é estreito e declarado nos dois sentidos: três módulos sim, quatro não, com o critério explícito. Ver decisão.

A discordância tem seção própria, com o argumento de quem discordou preservado e a mitigação registrada. Se o risco se materializar, a objeção estará lá — e ela era boa. Ver consequências.

Uma alternativa descartada foi parcialmente adotada como passo intermediário. Isso é comum na prática e raramente registrado.

O contexto liga esta decisão ao sinal de alerta do ADR-001, atingido dois meses antes. A cadeia de decisões da Verano é navegável de ponta a ponta — que é o efeito que o registro contínuo produz.

Conceitos Relacionados

Terminou de ler este documento?Seu progresso fica salvo apenas neste navegador.