System Design/04 - Cloud Design Patterns/Design & Implementation2 min
Anti-Corruption Layer
- 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