Pular para o conteúdo

apps/patterns/decorator-pattern

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

Decorator Pattern

Acrescenta responsabilidades a um objeto em tempo de execução, por composição: cada decorador implementa a mesma interface, envolve o serviço e roda o próprio comportamento antes ou depois de delegar. Evita uma subclasse por combinação de logging, validação, auditoria e taxa.

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

Cenário

Um serviço de transferências grava cada transferência no PostgreSQL. Conforme o canal, a mesma operação ganha log, validação, trilha de auditoria (também no PostgreSQL) ou taxa de 2,5%, sem nenhuma subclasse: as combinações são montadas em tempo de execução.

Planta

Classes
8/8
«interface»InterfacePaymentService+transfer(accountFromId, accountToId, amountCents)ServicePaymentPostgresDecoratorPaymentValidationDecoratorPaymentFeeDecoratorPaymentAuditDecoratorPaymentLoggingdelegadelegadelega
8

8 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Empilha comportamento sem alterar a classe.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    ContratoInterfacePaymentService.transfer(accountFromId, accountToId, amountCents)

  2. 02

    Componente realServicePaymentPostgres insere a linha em transfers

  3. 03

    DecoradoresValidação rejeita antes de chegar ao serviço; taxa soma a tarifa em centavos (basis points); auditoria grava cada tentativa em transfer_audit; logging registra início, fim e falha

  4. 04

    Ordem de empilhamentoValidação mais interna, logging mais externo — o log registra até o erro de validação

  5. 05

    TransparênciaNenhum decorador engole erro; auditoria e logging registram e relançam

  6. 06

    Composição dinâmicaA mesma instância do serviço real é envolvida por pilhas diferentes no demo

apps/patterns/decorator-pattern

6 arquivos

sql/

  • 01_schema.sqlschemaTabelas transfers e transfer_audit

src/

  • decorator_payment.tsInterface, serviço real e os quatro decoradores
  • config_transfer.tsLê e valida o ambiente no boot
  • decorator_payment.test.tstesteTaxa e validação na fronteira, transparência, empilhamento e auditoria contra PostgreSQL
  • demo.tsdemoCinco pilhas diferentes sobre o mesmo serviço

./

  • docker.shinfraSobe o PostgreSQL com o schema

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 Decorator Pattern?

Próximo projeto · Padrões FundamentaisDependency Injection
Esc

↑ ↓ navegarEnter abrir191 resultados