📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 10: Paradigmas e Padrões de Projeto. Recomendado revisar antes de começar.

📐 Gateway de Pagamentos com Padrões GoF & SOLID

v1.0 — Factory Method, Strategy, Decorator, Observer e Princípios SOLID

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: Engenheiro de Software Pleno. Código amador usa dezenas de if/else e switch/case espalhados para decidir regras de negócio. Um engenheiro experiente aplica os Padrões de Projeto GoF, tornando o código extensível, modular e imune a quebras quando novos provedores são adicionados.


🎯 Objetivo & Escopo do Projeto

Construir um Gateway de Pagamentos Corporativo aplicando os padrões Strategy (para alternância de meios de pagamento Pix, Cartão e Boleto), Factory Method (para instanciação desacoplada), Decorator (para injeção transparente de logs de auditoria e métricas) e Observer (para notificações de confirmação de pagamento).


🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Diretor Financeiro)

“Nosso e-commerce aceita apenas Cartão de Crédito com um código cheio de ifs acoplados. Precisamos aceitar Pix e Boleto sem reescrever o checkout, queremos que cada transação registre logs de auditoria automaticamente sem poluir a regra de negócio do pagamento, e precisamos notificar o cliente por e-mail quando a compra for confirmada.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Suportar múltiplos métodos de pagamento intercambiáveis (Pix, Cartão, Boleto). “aceitar Pix e Boleto sem reescrever”
RF02 Funcional Adicionar camada transparente de auditoria e logging em todas as transações. “registre logs de auditoria”
RF03 Funcional Notificar sistemas externos (E-mail, BI) via eventos após confirmação. “notificar o cliente por e-mail”
RNF01 Não-Funcional Princípio Aberto/Fechado (OCP): adicionar novo método sem alterar classes existentes. Arquitetura SOLID
RNF02 Não-Funcional Inversão de Dependência (DIP): depender de abstrações (MetodoPagamento). Arquitetura SOLID

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como cliente, quero pagar via Pix recebendo QR Code com processamento auditado. Alta
US02 Como arquiteto, quero plugar novos adquirentes sem alterar a classe de Checkout. Alta

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-gof-payment-gateway

# Executar a suíte de pagamentos
python src/gateway_core.py

🛠️ Fase 4 — Implementação Guiada (src/gateway_core.py)

class PagamentoFactory:
    @staticmethod
    def criar(tipo: str) -> MetodoPagamento:
        if tipo.lower() == "pix":
            return PagamentoComAuditoria(PagamentoPix())
        elif tipo.lower() == "cartao":
            return PagamentoComAuditoria(PagamentoCartao())
        raise ValueError(f"Metodo de pagamento nao suportado: {tipo}")


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd padroes_01_gateway_pagamentos_gof

2. Execute a aplicação ou testes

# Executar comandos específicos da tecnologia:
python main.py # ou npm run dev / ./gradlew build

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/padroes_01_gateway_pagamentos_gof`

🧭 Decisões de Arquitetura (ADRs)


🧪 Testes de Validação & Asserções

pix = PagamentoFactory.criar("pix")
assert pix.processar(100.0) == True


🏛️ Arquitetura Visual & Engenharia do Sistema

A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta app-python/:

Arquitetura da Aplicação

flowchart TD
    subgraph Entrada["Camada de Entrada & CLI"]
        IN1["Interface de Comando / API"] --> IN2["Parser & Sanitização"]
    end
    subgraph Dominio["Camada de Domínio & Regras"]
        DM1["Modelos de Domínio"] --> DM2["Processamento Algorítmico"]
    end
    subgraph Armazenamento["Persistência & Recursos"]
        ST1["Banco de Dados / Arquivo"] --> ST2["Transações ACID & Logs"]
    end
    subgraph Qualidade["Validação & Qualidade"]
        QA1["Testes Automatizados"] --> QA2["Checkpoints CP-01..05 PASS"]
    end

    Entrada --> Dominio
    Dominio --> Armazenamento
    Armazenamento --> Qualidade

    style Entrada fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
    style Dominio fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
    style Armazenamento fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
    style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

ID Persona História de Usuário Critério de Aceite Prioridade
US-01 Arquiteto de Pagamentos Desejo suportar múltiplos meios de pagamento (PIX, Cartão, Boleto) Padrão Strategy isolando regras de cada método de cobrança Alta
US-02 Desenvolvedor Backend Desejo fábrica de processadores para criação desacoplada de objetos Padrão Factory Method instanciando provedores conforme configuração Alta
US-03 Engenheiro de Integração Desejo integrar APIs de adquirentes com interfaces distintas Padrão Adapter unificando assinaturas de métodos externos Alta
US-04 Analista de Operações Desejo adicionar logging, retries e métricas sem poluir regras centrais Padrão Decorator envolvendo chamadas com auditoria e resiliência Média
US-05 Auditor de Arquitetura Desejo testes unitários validando conformidade estrita com SOLID Testes assegurando que novos provedores não alteram classes existentes (OCP) Média

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Implementação de Strategy para estratégias PIX, Boleto e Cartão de Crédito Alta
RF-02 Fábrica abstrata / Factory Method para seleção dinâmica de gateways Alta
RF-03 Adapter para integração com APIs simuladas de adquirentes de terceiros Alta
RF-04 Decorators de telemetria, logs de auditoria e retry exponencial Média
RF-05 Módulo de testes automatizados com cobertura dos cenários de transação Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Adesão integral aos 5 princípios SOLID (SRP, OCP, LSP, ISP, DIP) Alta
RNF-02 Idempotência garantida em tentativas repetidas de cobrança Alta
RNF-03 Desacoplamento através de Interfaces e Classes Abstratas (ABCs) Média
RNF-04 Código limpo e documentado com tipagem semântica estrita Média
RNF-05 Estruturação dos fontes na subpasta app-python/ Alta

🔗 Matriz de Rastreabilidade (RTM)

User Story Requisito Funcional Requisito Não-Funcional Módulo / Artefato de Código Status de Homologação
US-01 RF-01 RNF-01, RNF-03 app-python/gateway.py Testado
US-02 RF-02 RNF-01, RNF-03 app-python/gateway.py Testado
US-03 RF-03 RNF-01, RNF-04 app-python/gateway.py Testado
US-04 RF-04 RNF-02, RNF-04 app-python/gateway.py Testado
US-05 RF-05 RNF-01, RNF-05 app-python/gateway.py Testado

🏁 Checkpoints de Qualidade & Homologação

Checkpoint Escopo da Validação Artefato Verificado Status
CP-01 Inicialização & Estrutura de Pastas app-python/ PASS ✅
CP-02 Modelagem de Domínio & Regras Centrais Domain Models PASS ✅
CP-03 Persistência & Operações de I/O Storage / Data PASS ✅
CP-04 Interface de Operação & Usabilidade CLI / GUI / API PASS ✅
CP-05 Homologação com Suíte de Testes Test Suite PASS ✅