Biblioteca de Engenharia para IA
Prévia Markdown

Guia de Referência: Flyweight (Estrutural)

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

Guia de Referência: Flyweight (Estrutural)

Este guia orienta a aplicação do padrão Flyweight em projetos de software. Objetivo: Economizar memória compartilhando estado intrínseco imutável entre grande quantidade de objetos. O padrão deve ser usado somente quando as forças do problema o justificarem.


1. Problema que resolve

Milhares/milhões de objetos repetem os mesmos dados pesados e o consumo de memória vira gargalo real.

Sinais no código/arquitetura

2. Quando usar

3. Quando NÃO usar

4. Estrutura e participantes

5. Procedimento de implementação

  1. Meça memória antes.
  2. Separe estado intrínseco de extrínseco.
  3. Torne o estado compartilhado imutável.
  4. Crie fábrica/cache por chave.
  5. Passe o contexto externo explicitamente.

6. Exemplo mental

Um mapa com 500 mil árvores guarda posição por árvore, mas compartilha TreeType (textura, espécie, mesh) entre todas da mesma espécie.

7. Benefícios esperados

8. Custos e trade-offs

9. Encaixe com Clean Architecture e SOLID

É otimização de detalhe; só introduza após medição. Não deixe preocupações de memória contaminarem o domínio se puderem ser isoladas em representação/infra.

Regras para a IA:

10. Caminho de refatoração

Não deve ser escolhido por “cheiro” apenas; precisa de evidência de duplicação de estado e pressão de memória.

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 compartilhamento correto, imutabilidade e ausência de vazamento de estado entre contextos.

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 **Flyweight** é 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 Flyweight.
2. Compare pelo menos uma alternativa mais simples e um padrão relacionado (Composite, Singleton, 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: Editor renderiza dezenas de milhares de símbolos que repetem fonte, cor e metadados imutáveis.
Objetivo: Compartilhar estado intrínseco para reduzir memória sem confundir estado por instância.
Restrições: Medir benefício antes; separar claramente estado intrínseco e extrínseco.

15. Critério de aceite

A aplicação de Flyweight 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.