📚 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.
v1.0 — Factory Method, Strategy, Decorator, Observer e Princípios SOLID
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Padrões GoF Criacionais, Estruturais e Comportamentais · SOLID
- v2: Repository Pattern & Unit of Work Enterprise
- v3: Specification Pattern & Chain of Responsibility
- v4: Event Sourcing & CQRS Architecture
🎓 Nível Profissional Simulado: Engenheiro de Software Pleno. Código amador usa dezenas de
if/elseeswitch/caseespalhados 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.
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).
“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.”
| 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 |
| 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 |
# Branch da funcionalidade
git checkout -b feature/US01-gof-payment-gateway
# Executar a suíte de pagamentos
python src/gateway_core.py
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}")
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd padroes_01_gateway_pagamentos_gof
# 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`
pix = PagamentoFactory.criar("pix")
assert pix.processar(100.0) == True
A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta app-python/:
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
| 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 |
| 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 |
| 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 |
| 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 |
| 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 ✅ |