Pular para o conteudo principal

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

Andrews Ribeiro

Founder & Engineer

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

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Próximo artigo Pipeline interno de validação sem repetir regra em toda borda Artigo anterior Tombstone e exclusão lógica em estados derivados sem drift eterno

Continue explorando

Artigos relacionados