Pular para o conteúdo

apps/api/anti-corruption-layer

115 · API & Integração · ≈ 5 min de estudo

Anti-Corruption Layer

Uma camada de tradução nos dois sentidos entre o domínio novo e um sistema externo de modelo incompatível. Os tipos, códigos e formatos do legado são declarados dentro da camada e não saem dela; o restante do sistema chama só a facade e enxerga só o próprio modelo. Use ao integrar core bancário, mainframe, bureau ou ERP sem deixar o vocabulário deles contaminar o domínio.

Veja também: api/adapter — quando a diferença é só de interface, não de modelo.

passos
5
arquivos
4
testes
0
tecnologias
5
Infraestrutura realTypeScriptBunElysiaMariaDBDocker
Baixar cartão

Cenário

O banco digital lê e abre contas no core bancário dos anos 90. O core responde em CAIXA ALTA, guarda reais em decimal, datas como DD/MM/AAAA, status numa letra, lançamentos sem sinal com tipo D/C e o bloqueio judicial numa coluna separada do saldo. Todo retorno é HTTP 200 com um código em CD_RETORNO. Nada disso pode aparecer no modelo do banco digital.

Planta

Fluxo
6/6
Contexto banco digitalAnti-Corruption LayerCore bancario legadoAccount, StatementEntrycentavos, datas ISO,saldo disponivelFacadeaccountLoad, accountOpenTradutoresreais para centavos,DD/MM/AAAA,nome sem acento,D/C com sinalCodigos CD_RETORNOpara excecoes de dominioAPI HTTPCAIXA ALTA, sempre 200MariaDBcontas, lancamentos
6

6 passos — reproduza para seguir o fluxo

Como funciona

5 passos

Tradutor protege o domínio do legado.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    aclCoreCreate devolve a facade — accountLoad e accountOpen — única porta do domínio para o core

  2. 02

    LeituraReais viram centavos dígito a dígito, DD/MM/AAAA vira data ISO, D/C vira valor com sinal e o saldo disponível sai de saldo menos bloqueio judicial

  3. 03

    Status desconhecido é lido como blocked, nunca como conta movimentável

  4. 04

    EscritaO nome perde acentos e pontuação e vai em CAIXA ALTA, centavos voltam a reais em string, a data volta a DD/MM/AAAA

  5. 05

    CD_RETORNO vira exceção de domínio (ErrorAccountNotFound, ErrorBranchInvalid); core fora do ar é ErrorCoreUnavailable, nunca "conta inexistente"

Trade-offs

O que se ganha, o que se paga

3 vantagenscada ganho tem um preço3 custos

Vantagens

  • Domínio livre do vocabulário do legado

  • Mudança no core fica contida na ACL

  • Trocar o core por um serviço novo mexe só na ACL

Custos

  • Camada extra para manter a cada mudança do core

  • Tradução com perda (acentos) precisa ser aceita pelo negócio

  • Sem disciplina, a ACL acumula regra de negócio

apps/api/anti-corruption-layer

4 arquivos

src/

  • acl_core.tsA camada: tipos do core, tradutores nos dois sentidos, códigos de retorno e facade
  • domain_account.tsModelo e erros do banco digital
  • core_legacy.tsO core legado sobre MariaDB, como ele é

sql/

  • 01_schema.sqlschemaSchema do legado, fora das convenções de propósito

Executar · com Docker

  1. ./docker.sh up# sobe MariaDB
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
MariaDB
Esc

↑ ↓ navegarEnter abrir191 resultados