Pular para o conteúdo

apps/patterns/observer-pattern

021 · Padrões Fundamentais · ≈ 5 min de estudo

Observer Pattern

O Subject muda de estado e notifica todos os observers registrados, sem conhecer nenhum deles. Um handler novo entra por subscribe, sem tocar no produtor do evento.

passos
6
arquivos
7
teste
1
tecnologias
4
Infraestrutura realTypeScriptBunPostgreSQLDocker
Baixar cartão

Cenário

A conta de um banco digital registra créditos e débitos. Cada lançamento confirmado precisa chegar à auditoria, ao antifraude e à notificação do cliente — e amanhã a um programa de pontos. Com Observer, o ledger só conhece a interface InterfaceObserver; quem escuta se registra.

Planta

Sequência
5/5
transactionRecord(debit, ACC-001, R$ 8.000)1BEGIN, FOR UPDATE, saldo e extrato, COMMIT2update(event) — grava audit_log3update(event) — acima do limiar grava fraud_alerts4update(event) — avisa o cliente5a falha de um observer é logada e não impede os seguintesClienteLedgerAccount (Subject)PostgreSQLObserverAuditObserverFraudObserverNotification
5

5 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Sujeito notifica todos os inscritos.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    SubjectLedgerAccount aplica saldo e extrato numa transação (FOR UPDATE, saldo nunca negativo) e só depois do commit notifica

  2. 02

    ObserversObserverAudit grava audit_log, ObserverFraud grava fraud_alerts acima do limiar, ObserverNotification avisa o cliente

  3. 03

    Subscribe / unsubscribeInscrição repetida é ignorada; quem sai não é mais notificado

  4. 04

    Isolamento de falhatry/catch por observer — o programa de pontos fora do ar não impede a notificação

  5. 05

    Cópia da listaUm observer que se desinscreve dentro de update não faz o laço pular o próximo

  6. 06

    Só o que foi confirmadoDébito recusado por saldo não notifica ninguém

apps/patterns/observer-pattern

7 arquivos

src/

  • observer_account.tsLedgerAccount (Subject), InterfaceObserver e os observers de auditoria, antifraude e notificação
  • pool_bank.tstransactionExecute e conversão de centavos para NUMERIC
  • config_account.tsLê e valida ACCOUNT_DATABASE_URL no boot
  • demo.tsdemoLançamentos com um observer quebrado e o antifraude desinscrito no fim
  • observer_account.test.tstesteIntegração com PostgreSQL real: ordem, isolamento de falha, cópia da lista e limiar de fraude

sql/

  • 01_schema.sqlschemaTabelas accounts, account_transactions, audit_log, fraud_alerts

./

  • docker.shinfraSobe o PostgreSQL (porta 5432)

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

Testes: bun run test.

Requisitos
BunDocker
Sobe junto
PostgreSQL

Por que se relacionam

Teste rápido

Qual destes combina com Observer Pattern?

Próximo projeto · Padrões FundamentaisOutbox Pattern
Esc

↑ ↓ navegarEnter abrir191 resultados