4 de Agosto de 2025
Camada anti-corrupção entre domínios internos
Quando um domínio começa a vazar linguagem e regra para outro, alguma tradução passa a fazer falta.
Andrews Ribeiro
Founder & Engineer
3 min Intermediario Sistemas
O problema
Quando o backend cresce, alguns módulos começam a falar alto demais.
Exemplos clássicos:
- billing vira linguagem do sistema inteiro
- catálogo impõe estrutura em pedidos
- identidade vaza conceito para autorização, CRM e analytics
Aí outros domínios param de conversar no próprio idioma e passam a depender:
- de nomes
- de flags
- de estados
- de estruturas
que não nasceram para eles.
Modelo mental
Anti-corrupção não é “mais uma camada” por definição.
É um ponto de tradução que protege um domínio de absorver linguagem ou regra alheia sem perceber.
Dentro do mesmo backend, isso pode fazer sentido quando:
- modelos têm semântica diferente
- estados com mesmo nome significam coisas diferentes
- um domínio fornecedor começa a deformar os consumidores
Exemplo simples
Imagine billing expondo invoice_status.
Pedido começa a depender disso para decidir:
- se pode entregar
- se pode reabrir
- se deve estornar
Mas pedido não deveria pensar em invoice_status.
Ele deveria pensar em algo como:
- pagamento confirmado
- pagamento pendente
- pagamento irreconciliável
Essa tradução já é uma forma de anti-corrupção.
Não porque o time quer parecer DDD.
Mas porque os significados são diferentes.
O erro comum
O erro comum é criar uma camada com nome bonito que, na prática, faz só isto:
- copia campo A para campo B
- renomeia enum
- passa o payload para frente
Se não há proteção de semântica, regra ou dependência, isso é só um corredor a mais no sistema.
Camada ornamental deixa o desenho maior sem deixar a fronteira mais clara.
Quando realmente vale
Costuma valer quando a tradução:
- preserva vocabulário do domínio consumidor
- reduz dependência de estrutura instável do domínio fornecedor
- evita que regra de um lado escorra para o outro
Se essa proteção não existe, talvez um contrato direto e menor já resolva.
Como um senior pensa
Quem tem mais experiência costuma perguntar:
- qual contaminação concreta estou tentando evitar?
- este domínio precisa entender o conceito original ou só um efeito traduzido?
- a tradução está preservando autonomia ou só criando ritual?
- se o domínio fornecedor mudar amanhã, o impacto fica contido?
Essa conversa costuma separar arquitetura útil de arquitetura cosplay.
Ângulo de entrevista
Esse tema aparece em modularização, DDD e system design interno.
O entrevistador quer ver se você entende:
- que anti-corrupção é ferramenta de proteção semântica
- que nem toda fronteira precisa de uma camada dedicada
- que tradução útil é a que reduz acoplamento conceitual real
Resposta forte costuma soar assim:
“Eu usaria uma camada de tradução quando um domínio interno estiver vazando linguagem ou regra que não pertence ao outro. Se a camada só repassa payload com nome diferente, ela não está protegendo nada. O objetivo é preservar autonomia sem criar teatro.”
Takeaway direto
Anti-corrupção interna boa não existe para enfeitar a arquitetura.
Existe para impedir que um domínio colonize o outro.
Resumo rápido
O que vale manter na cabeça
- Anti-corrupção interna só faz sentido quando protege linguagem, regra ou modelo de um domínio contra vazamento de outro.
- Se a camada só renomeia campo sem mudar entendimento, ela provavelmente é ornamental.
- Domínios internos também podem se contaminar quando um módulo vira fornecedor conceitual de todo o resto.
- Boa tradução interna reduz dependência sem criar cerimônia inútil.
Checklist de pratica
Use isto ao responder
- Um domínio interno está forçando sua linguagem ou estrutura para outros módulos?
- Essa tradução protege regra e semântica ou só move dados de um formato para outro?
- Estou criando camada porque há contaminação real ou só por estética arquitetural?
- Se eu remover essa camada, o acoplamento conceitual piora de verdade?
Você concluiu este artigo
Próximo passo
Monólito modular na prática Próximo passo →Compartilhar esta página
Copie o link manualmente no campo abaixo.