Pular para o conteúdo

apps/service-design/composite-pattern

167 · Padrões de Design de Serviço · ≈ 5 min de estudo

Composite

Trata uma conta isolada e um grupo de contas pela mesma interface. A folha tem o saldo e a regra; o composto só delega aos filhos e agrega o resultado, em qualquer profundidade. Use em hierarquias parte-todo — contas corporativas, carteiras com subcarteiras, centros de custo — em que o chamador não deve se importar se tem um nó ou uma árvore.

passos
6
arquivos
3
testes
0
tecnologias
3
Lógica puraTypeScriptBunStryker
Baixar cartão

Cenário

Um grupo empresarial tem filiais, e cada filial tem contas de caixa e de aplicações. A tesouraria quer o saldo consolidado do grupo, de uma filial ou de uma conta, e aplicar uma política de limite por conta — a mesma chamada em qualquer nível. Uma filial nunca pode conter o próprio grupo.

Planta

Fluxo
7/7
AccountCompositeGrupo AlfaAccountCompositeFilial Sao PauloAccountCompositeFilial RioAccountLeafTesourariaAccountLeafCaixa SPAccountLeafAplicacoes SPAccountLeafCaixa RJAccountLeafAplicacoes RJ
7

7 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Parte e todo tratados igual.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

balanceCents+1
  1. 01

    InterfaceAccountComponent define só o que vale para conta e grupo: balanceCents, limitApply, contains, describe

  2. 02

    AccountLeaf é o caso base: devolve o próprio saldo e avalia o limite (dentro quando o saldo é menor ou igual ao limite)

  3. 03

    AccountComposite soma o saldo dos filhos e junta as checagens de limite de todos — nenhuma regra de negócio mora nele

  4. 04

    limitApply devolve a lista de todas as contas da árvore, não para na primeira acima do limite

  5. 05

    add e remove existem só no composto; add recusa um filho que já contenha o composto (ErrorAccountCycle), o que evita recursão infinita

  6. 06

    Valores em centavos; describe mostra a árvore indentada por nível

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Chamador uniforme, sem if (isGroup)

  • Profundidade arbitrária sem mudar código

  • Todas as violações da árvore de uma vez

  • Regra num lugar só, na folha

Custos

  • Interface comum limita o que se pode perguntar

  • Operação cara recalcula a árvore inteira a cada chamada

  • Ciclo precisa de checagem explícita

  • Difícil restringir que tipo de filho cada grupo aceita

apps/service-design/composite-pattern

3 arquivos

src/

  • component_account.tsInterface comum e a checagem de limite
  • leaf_account.tsConta individual: saldo e regra de limite
  • composite_account.tsGrupo: delega, agrega, gerencia filhos e barra ciclo

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário
  3. bun run test# testes unitários
  4. bun run test:mutation# mutação com Stryker
Requisitos
Bun

Por que se relacionam

Teste rápido

Qual destes combina com Composite Pattern?

Próximo projeto · Padrões de Design de ServiçoBridge
Esc

↑ ↓ navegarEnter abrir191 resultados