Pular para conteúdo

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

  1. Testes de caracterização aprovados antes e depois da refatoração.
  2. Redução comprovada da complexidade ciclomática das funções originais.
  3. Padrões de projeto aplicados com justificativa arquitetural documentada.