Pular para o conteúdo

apps/service-design/adapter

157 · Padrões de Design de Serviço · ≈ 6 min de estudo

Adapter

Envolve um sistema externo — SDK, parceiro ou legado — numa interface que o domínio define, traduzindo campos, unidades, datas e códigos nos dois sentidos. O domínio conversa só com a interface e nunca sabe o que está do outro lado. Use ao integrar mainframe, PSP ou API de terceiro sem deixar a convenção deles vazar para o negócio.

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

Cenário

O banco tem o core num mainframe que não pode mudar: campos em caixa alta, saldo em centavos inteiros, data YYYYMMDD, status de uma letra e códigos de retorno de dois dígitos. A nova API de contas mostra saldo, extrato e aceita débitos no formato do domínio; o adapter faz toda a tradução, em ida e volta.

Planta

Sequência
8/8
POST /accounts/0001234567-8/debits (amountCents, description)1debitPost(DebitRequest)2YYYYMMDD, HIST em caixa alta sem acento, 30 posicoes, VL_DB em centavos3POST /LANCAMENTOS (CONTA_NR, NSU, DT, HIST, VL_DB)4SALDO_CR, MAINFRAME_LANCAMENTOS5RC 00, 51, 62, 94...6outcome debited, insufficient-funds, account-blocked, duplicate7201, 422, 4098ClienteAPI de contas (dominio)AdapterAccountMainframeMainframe legado (HTTP)MariaDB do mainframe
8

8 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Padroniza interfaces heterogêneas.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    gateway_account.ts define a interface do domínio antes de qualquer adapter: accountFind, statementList, debitPost, com balanceCents, datas ISO e status fechados

  2. 02

    AdapterAccountMainframe implementa essa interface por composição sobre a API HTTP do mainframe — sem herança, sem tipo do mainframe fora do arquivo

  3. 03

    LeituraALICE MENDES vira Alice Mendes, 20260901 vira 2026-09-01, VL_CR/VL_DB viram um valor com sinal

  4. 04

    EscritaA descrição vira HIST em caixa alta, sem acento, cortada nas 30 posições do mainframe; o requestId vira o NSU que o mainframe usa para barrar repetição

  5. 05

    Código de retorno vira resultado do domínio (51 → insufficient-funds, 94 → duplicate); status ou código desconhecido falha fechado (closed, rejected)

  6. 06

    A API recebe a interface por injeção: trocar o mainframe por outro core muda só o adapter

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Domínio sem convenção do fornecedor

  • Troca de fornecedor muda só o adapter

  • Desconhecido falha fechado num lugar só

  • Adapter falso simples para teste do domínio

Custos

  • Mapeamento extra por campo e por código

  • Adapter de duas vias cresce com cada operação

  • Sem disciplina, o adapter acumula regra de negócio

  • Tradução com perda (30 posições, sem acento) exige teste de fronteira

apps/service-design/adapter

5 arquivos

src/

  • gateway_account.tsInterface e tipos do domínio
  • adapter_mainframe.tsAdapter de duas vias: tradução e chamadas ao mainframe
  • api_account.tsAPI moderna que só conhece a interface
  • legacy_mainframe.tsMainframe legado simulado sobre MariaDB

sql/

  • 01_schema.sqlschemaSchema 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