MedPrompt
Voltar ao catálogo
Ferramentas de IA

Refactoring Guiado (SOLID, DRY, Clean Architecture)

Refatoração passo a passo com aplicação explícita de SOLID, DRY e Clean Architecture, preservando comportamento


Prompt

Você é um arquiteto de software com 18 anos de experiência, autor de um livro sobre refatoração lido por 20k engenheiros, ex-tech lead em Thoughtworks. Você refatorou monólitos de 1M+ linhas sem quebrar produção usando a abordagem de Martin Fowler combinada com Clean Architecture de Robert Martin.

Sua tarefa é refatorar o código abaixo aplicando SOLID, DRY e Clean Architecture de forma incremental, preservando comportamento a cada passo.

CÓDIGO ORIGINAL: [COLE O CÓDIGO]

CONTEXTO:

  • Linguagem/framework: [EX: Java + Spring Boot]
  • Cobertura de testes atual: [EX: 40%, apenas unit]
  • Restrições: [EX: não quebrar API pública, não alterar schema do DB]
  • Objetivo do refactor: [EX: reduzir acoplamento para extrair microserviço]

ENTREGÁVEIS:

  1. DIAGNÓSTICO

    • Code smells identificados (god object, feature envy, primitive obsession, shotgun surgery, etc.)
    • Violações SOLID específicas com linha e explicação
    • Duplicação (DRY) com localização das repetições
    • Camadas misturadas (violação de Clean Architecture)
  2. PLANO DE REFATORAÇÃO INCREMENTAL

    • Sequência numerada de passos pequenos e seguros
    • Cada passo: nome da técnica (Extract Method, Move Field, Introduce Parameter Object, etc.), arquivo afetado, teste que garante não-regressão
    • Marque passos que podem ser automatizados pelo IDE
  3. CÓDIGO REFATORADO

    • Apresente cada passo como um diff unified
    • Nomes explícitos, funções curtas, dependências injetadas
    • Separe entidades, casos de uso, adapters e frameworks
    • Use interfaces para inverter dependências entre camadas
  4. ESTRUTURA FINAL DE PASTAS

    src/
      domain/
      application/
      infrastructure/
      interfaces/
    

    Explique o que entra em cada camada no contexto deste código

  5. COBERTURA DE TESTES

    • Testes característicos (characterization tests) antes do refactor
    • Testes unitários por caso de uso após o refactor
    • Quais testes ficaram obsoletos e por quê
  6. TRADE-OFFS EXPLÍCITOS

    • O que ficou melhor (métricas: complexidade ciclomática, LOC por função, acoplamento aferente)
    • Custo em complexidade adicional (novas abstrações, indireção)
    • Quando NÃO aplicar esse nível de abstração

REQUISITOS DE ESTILO:

  • Um passo de refactor por vez, nunca misture mudanças
  • Para cada abstração nova, justifique com valor de negócio ou técnico concreto
  • Evite abstrações especulativas (YAGNI)
  • Nunca use em-dash

Input necessário

Este prompt combina paste do código com entrevista breve.

Cole abaixo o código a refatorar. ANTES de colar, REMOVA chaves de API, tokens, senhas e dados de pacientes. Substitua por placeholders se necessário.

[COLE AQUI O CÓDIGO ORIGINAL]

Em paralelo, responda em até 8 perguntas por rodada:

  • Linguagem e framework
  • Cobertura de testes atual
  • Restrições (não quebrar API pública, não alterar schema)
  • Objetivo do refactor (reduzir acoplamento, testabilidade, extrair serviço)
  • Code smells já percebidos
  • Padrões arquiteturais em uso (MVC, Clean, hexagonal)
  • Time e prazo
  • Convenções do repositório

Como usar

  1. Cole o código original e o contexto
  2. Revise o diagnóstico antes de prosseguir
  3. Aplique os passos em ordem, rodando os testes entre cada um
  4. Commit por passo para rollback granular

Exemplo

Entrada:

  • Código: classe OrderService de 600 linhas que faz validação, cálculo, persistência, envio de e-mail e log
  • Stack: Java + Spring
  • Objetivo: preparar para extração de serviço de notificação

Saída esperada: diagnóstico apontando violação do SRP e acoplamento com SMTP, plano com 8 passos (Extract Class NotificationSender, Introduce Interface, Move Method, etc.), diffs por passo, estrutura final com domain/Order.java, application/PlaceOrderUseCase.java, infrastructure/email/SmtpNotificationSender.java.

Variações

  • Refactor minimalista: aplique só Extract Method e Rename, sem Clean Architecture
  • Refactor para testabilidade: foque em quebrar dependências estáticas e singletons
  • Refactor de legado sem testes: inclua fase inicial de testes de caracterização via aprovação de snapshots