Biblioteca de Engenharia para IA
Prévia Markdown

Guia de Referência: Strategy (Comportamental)

Visualização renderizada do arquivo padroes/comportamentais/strategy.md. O conteúdo abaixo é o mesmo arquivo destinado a orientar a IA.

Guia de Referência: Strategy (Comportamental)

Este guia orienta a aplicação do padrão Strategy em projetos de software. Objetivo: Encapsular algoritmos intercambiáveis sob um contrato comum e escolher a estratégia conforme o contexto. O padrão deve ser usado somente quando as forças do problema o justificarem.


1. Problema que resolve

Uma regra varia por cliente, tipo, política ou cenário e condicionais de seleção/algoritmo estão misturadas ao fluxo principal.

Sinais no código/arquitetura

2. Quando usar

3. Quando NÃO usar

4. Estrutura e participantes

5. Procedimento de implementação

  1. Extraia a parte que realmente varia.
  2. Defina entradas/saídas estáveis.
  3. Crie estratégias sem dependências desnecessárias.
  4. Selecione no composition root ou por política explícita.
  5. Evite if duplicado tanto no context quanto fora dele.

6. Exemplo mental

OvertimeCalculator recebe OvertimeStrategy; regras 50%, 100% ou convenção coletiva são implementações separadas.

7. Benefícios esperados

8. Custos e trade-offs

9. Encaixe com Clean Architecture e SOLID

Estratégias de regra de negócio podem ficar no domínio/aplicação. A seleção baseada em configuração externa deve ocorrer na borda/composition root.

Regras para a IA:

10. Caminho de refatoração

Ideal para switches repetidos sobre tipo de cálculo/política.

Ao refatorar um sistema existente:

  1. Proteja o comportamento atual com testes.
  2. Faça passos pequenos e reversíveis.
  3. Introduza primeiro a abstração/contrato.
  4. Migre um fluxo por vez.
  5. Remova código antigo apenas após equivalência comportamental comprovada.

11. Estratégia de testes

Teste cada estratégia com tabela de casos e o seletor separadamente. Use testes de propriedade quando fórmulas forem complexas.

Checklist mínimo:

12. Padrões relacionados

13. Perguntas de diagnóstico para a IA

  1. Qual aspecto do sistema realmente varia?
  2. Essa variação já está causando duplicação, condicionais ou acoplamento?
  3. Uma função/composição simples resolveria com menos abstrações?
  4. O padrão reduz o custo de uma mudança concreta que já é provável?
  5. Qual é o custo de introduzir novas classes, indireção e configuração?
  6. Como a decisão será testada e observada em produção?

14. Prompt pronto

Você é o arquiteto do projeto. Avalie se o padrão **Strategy** é adequado para o problema abaixo.

Contexto: [DESCREVA o sistema, stack/arquitetura, estado atual e o problema observado]
Objetivo: [DESCREVA o resultado esperado ao avaliar ou aplicar este padrão]
Restrições: [DESCREVA prazo, legado, performance, testes, compatibilidade e o que não pode mudar]

Antes de codificar:
1. Identifique as forças que justificam ou rejeitam Strategy.
2. Compare pelo menos uma alternativa mais simples e um padrão relacionado (State, Template Method, Factory Method).
3. Se o padrão for justificado, mostre participantes, dependências e fluxo.
4. Preserve Clean Architecture/SOLID: regras centrais não dependem de infraestrutura.
5. Implemente incrementalmente, com testes.
6. Ao final, liste trade-offs e sinais de overengineering.

Não aplique o padrão apenas porque foi solicitado; rejeite-o se não houver variação/complexidade que o justifique.

Como preencher os campos

Exemplo preenchido

Contexto: Folha de pagamento possui regras diferentes de cálculo de hora extra por categoria de empregado.
Objetivo: Trocar o algoritmo de cálculo conforme o contexto sem switches repetidos.
Restrições: Cada estratégia deve obedecer ao mesmo contrato; não criar estratégia para variação inexistente.

15. Critério de aceite

A aplicação de Strategy só está concluída quando:

16. Base Conceitual e Relações

/mind-map
Navegação contextual

Mapa gerado a partir dos títulos desta página. Clique em um ramo para abrir o expander correspondente e ir diretamente à seção.

progress_activity Gerando mapa…
Configurações

Aparência

Escolha como a biblioteca deve aparecer neste navegador.

Desenvolvimento

Informações da versão e autoria ficam disponíveis somente nesta área.