Aula 15: Refatoração com Padrões ♻️
🎯 Objetivos da Aula
- [x] Identificar oportunidades de melhoria em código legado.
- [x] Substituir condicionais complexas por polimorfismo (Strategy).
- [x] Desacoplar sistemas usando Adapter.
- [x] Aplicar o ciclo: Identificar cheiro -> Escolher Padrão -> Refatorar.
💡 O Poder da Refatoração
Refatorar não é apenas "mudar o nome de variáveis". É alterar a estrutura interna do código para torná-lo mais elegante e sustentável, sem alterar seu comportamento externo.
"Se o código está funcionando, mas é um pesadelo de manter, ele está quebrado conceitualmente."
📊 De Switch para Strategy
graph TD
Old[Switch Case Gigante] --> Refactor[Refatoração]
Refactor --> New[Classes de Estratégia]
New --> Result[Código Flexível e OCP]
💻 Caso Real: Processamento de Pagamentos
Antes (Problemático)
def processar(tipo, valor):
if tipo == "CC": # Cartão de Crédito
# Lógica CC
elif tipo == "PIX":
# Lógica PIX
# Difícil de expandir!
Depois (Refatorado com Padrões)
class Pagamento:
def pagar(self, valor): pass
# Agora cada novo método é uma nova CLASSE, não um novo IF.
class PagamentoPix(Pagamento):
def pagar(self, valor):
print(f"Pagando R$ {valor} via Pix")
🧠 Destaques
Regra de Ouro
Antes de refatorar, garanta que você tenha testes automatizados. Eles são sua rede de proteção para garantir que você não quebrou nada durante a limpeza.
Atenção
Cuidado para não "sobrerrefatorar". Às vezes, um if simples é melhor do que 10 classes de padrão complexo. Use o bom senso.
🚀 Mini-projeto: Limpando o Legado
Pegue o seu projeto da Aula 08 (onde você auditou code smells) e agora aplique os padrões aprendidos para resolver pelo menos dois dos problemas identificados.
🎯 Próximos Passos
-
Slides
-
Quiz
-
Exercícios
-
Projeto