Projeto 15: Refatoração de Sistema Legado com Aplicação de Padrões 🔧
Escopo do Projeto
Objetivo: Aplicar estratégias de refatoração segura em um sistema de legado com alto acoplamento, substituindo condicionais aninhadas por Strategy, criação desordenada por Factory e simplificando acesso por Facade.
🎯 1. Contexto & Desafio Prático
Em ambientes corporativos reais, raramente desenvolve-se código do zero; a maior parte do esforço de engenharia consiste em modernizar sistemas legados sem quebrar clientes existentes. Você receberá um código de checkout monolítico com 200 linhas de código espaguete e o refatorará de forma segura e progressiva.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Cobertura de Testes de Caracterização): Criar suíte de testes que 'caracteriza' o comportamento atual do legado antes de realizar qualquer alteração estrutural.
- R2 (Substituição de Switch por Strategy): Substituir o cálculo de frete baseado em estados por estratégias polimórficas desacopladas.
- R3 (Introdução de Factory): Eliminar instâncias diretas de conexões de banco de dados e APIs externas através de fábricas.
- R4 (Preservação de Retrocompatibilidade): Garantir que a assinatura do método público legado continue funcionando através de uma Facade adaptadora.
📐 3. Diagrama Conceitual & Arquitetura
graph LR
Legacy["Código Legado (Monolítico & Espaguete)"] --> Tests["Testes de Caracterização (Blindagem)"]
Tests --> Step1["Passo 1: Extrair Strategy de Frete"]
Step1 --> Step2["Passo 2: Injetar Factory de Conexões"]
Step2 --> Step3["Passo 3: Encapsular Facade de Acesso"]
Step3 --> Clean["Sistema Refatorado, Modular e 100% Compatível!"]
style Legacy fill:#ffebee,stroke:#c62828
style Tests fill:#fff3e0,stroke:#e65100
style Clean fill:#e8f5e9,stroke:#2e7d32 💻 4. Especificação Técnica & Código de Referência
// refactoring_characterization_test.py
def test_legado_deve_manter_comportamento():
"""Teste de caracterização para garantir zero regressão na refatoração."""
# Entrada esperada pelo cliente legado
resultado = sistema_legado_checkout(cliente_tipo="VIP", valor=100.0, regiao="SUL")
assert resultado == {"total": 105.0, "status": "APROVADO"}
print("Teste de caracterização passou: refatoração segura para iniciar!")
📦 5. Critérios de Avaliação e Entrega
- Testes de caracterização aprovados antes e depois da refatoração.
- Redução comprovada da complexidade ciclomática das funções originais.
- Padrões de projeto aplicados com justificativa arquitetural documentada.