trilha

System Design/04 - Cloud Design Patterns/Design & Implementation2 min

Anti-Corruption Layer

Perguntas-guia
  • Que problema isso resolve?
  • Quando usar / quando NÃO usar?
  • Qual o principal trade-off?
  • Como isso falha em produção?

Conceito

Uma camada de tradução que isola o modelo novo do modelo antigo, impedindo que conceitos e distorções do legado contaminem o sistema em construção.

sistema novo → [ ACL ] → sistema legado
   modelo         traduz     modelo
   limpo                     antigo

Sem ela, a integração com o legado força o novo sistema a adotar seus nomes, seus formatos e suas anomalias — e em pouco tempo o "sistema novo" carrega toda a bagagem que se queria abandonar.

Trade-offs

A ACL é código que existe só para traduzir: mais uma camada, mais latência, mais manutenção. Quando o legado muda, ela muda.

O que se ganha em troca é a integridade do modelo novo — e essa integridade é o ativo principal de uma migração. Sem ACL, cada integração adiciona um pouco do legado ao novo, e a migração termina reproduzindo o que pretendia substituir.

A ACL também é o lugar certo para concentrar as feiuras: o campo STAT com valores A, I, P; a data em YYYYMMDD como string; o código de cliente com espaços à direita. Tudo isso fica em um arquivo, com testes, em vez de espalhado.

O ponto de decisão é quando removê-la. A ACL deve ser temporária, morrendo junto com o legado (Strangler Fig). Quando ela vira permanente, passa a ser mais uma camada para sempre — e sinaliza que a migração parou no meio.

Há também um custo de desempenho a observar: se a tradução exige várias chamadas ao legado para montar um objeto do modelo novo, a ACL pode virar Chatty IO.

Exemplo prático

legado:  { CLI_COD: "0042  ", CLI_STAT: "A", DT_CAD: "20260826" }
novo:    { clienteId: 42, ativo: true, cadastradoEm: Date(2026-08-26) }

A ACL faz: trim e conversão numérica, mapeamento de "A" para true, e parsing da data. Três traduções triviais isoladamente — e é justamente por serem triviais que, sem a camada, elas se espalham por dezenas de arquivos e viram permanentes.

Com a ACL, o domínio novo nunca vê CLI_STAT. E quando o legado for desligado, apaga-se um arquivo.

Relacionado


Parte de Design & Implementation · roadmap.sh/system-design

Buscar

Busca por título, seção e texto das notas