Pular para o conteúdo

apps/architecture/pipes-and-filters

048 · Arquiteturas de Alto Nível (Macro-Architecture) · ≈ 6 min de estudo

Pipes and Filters

Quebra um processamento em filtros pequenos com a mesma assinatura — recebem um registro e devolvem um registro — ligados por um pipe que só repassa a saída de um para a entrada do próximo. A ordem da cadeia é uma lista: inserir, remover ou trocar filtros independentes não toca em nenhum filtro. Use em processamento em etapas que muda de composição, como remessas, conciliação e importação de arquivos.

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

Cenário

A fintech recebe um arquivo de remessa com uma transferência por linha. Cada linha passa por parse, validação estrutural, enriquecimento com nome e KYC do pagador (cadastro no PostgreSQL) e liquidação. Linha com erro ou pagador sem KYC é rejeitada sem travar as outras; o mesmo arquivo reenviado não liquida nada duas vezes.

Planta

Fluxo
8/8
Arquivo de remessalinhas CNABparsevalidateenrichcadastro no PostgreSQLsettlegrava uma vez por linhasettlementsenrichvalidateordem alternativa
8

8 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Filtros encadeados transformam o fluxo.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    Todo filtro tem a forma { name, requires, run }, e run recebe e devolve o mesmo RemittanceRecord — nenhum filtro conhece outro

  2. 02

    pipelineCompose recebe a lista de filtros e encadeia os run na ordem da lista

  3. 03

    requires torna a dependência de ordem um dado: validate e enrich exigem só parse e trocam de lugar livremente; settle exige os dois e fica por último

  4. 04

    Montar a cadeia com um filtro antes do que ele exige lança ErrorPipelineOrder na hora da composição, não em produção

  5. 05

    validate junta todos os erros da linha; enrich lê o cadastro; settle decide liquidar ou rejeitar e grava

  6. 06

    UNIQUE (remittance_id, line_number) em settlements faz o reenvio do arquivo responder already-settled sem nova liquidação

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Filtro testável sozinho e reutilizável em outras cadeias

  • Reordenar ou inserir etapa muda só a lista

  • Dependência de ordem verificada na composição

  • Linha com erro não interrompe o arquivo

Custos

  • O registro inteiro trafega entre todas as etapas

  • Depurar exige inspecionar o registro entre filtros

  • Filtro com I/O por linha multiplica consultas ao banco

  • Cadeia longa soma a latência de cada etapa

apps/architecture/pipes-and-filters

4 arquivos

src/

  • pipeline_remittance.tsRegistro, contrato do filtro e composição da cadeia com checagem de ordem
  • filter_remittance.tsOs quatro filtros: parse, validate, enrich, settle
  • api_remittance.tsAPI que recebe o arquivo e roda cada linha na cadeia

sql/

  • 01_schema.sqlschemaCadastro de contas e liquidações por linha

Executar · com Docker

  1. ./docker.sh up# sobe PostgreSQL
  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
PostgreSQL

Por que se relacionam

Teste rápido

Qual destes combina com Pipes and Filters?

Próximo projeto · Arquiteturas de Alto Nível (Macro-Architecture)Data Mesh
Esc

↑ ↓ navegarEnter abrir191 resultados