Aplicação full stack demonstrando 5 padrões de projeto GoF aplicados num domínio real de e-commerce.
Sistema de e-commerce com fluxo completo de checkout, pagamento e gerenciamento de pedidos — construído para demonstrar como padrões de projeto clássicos (GoF) resolvem problemas concretos de design de software, não apenas em teoria.
Cada padrão foi aplicado onde faz sentido no domínio: o Factory cria processadores de pagamento sem expor implementação, o Strategy troca o algoritmo de desconto em runtime, o Observer notifica sistemas externos quando o status do pedido muda.
📌 Origem acadêmica — desenvolvido como trabalho da disciplina de Arquitetura e Projeto de Software (Engenharia de Software, Universidade de Vassouras). Sendo evoluído para um projeto mais robusto com deploy, testes e banco de dados relacional em produção.
| Padrão | Arquivo | Problema que resolve |
|---|---|---|
| Singleton | backend/app/config/database_singleton.py |
Garante única instância da conexão com o banco em toda a aplicação |
| Factory Method | backend/app/patterns/factory/payment_factory.py |
Cria processadores de pagamento (Pix, Cartão, Boleto) sem acoplar o checkout a implementações concretas |
| Strategy | backend/app/patterns/strategy/ |
Permite trocar o algoritmo de desconto/frete em runtime sem modificar o código do carrinho |
| Observer | backend/app/patterns/observer/ |
Notifica sistemas (e-mail, painel, console) quando o status de um pedido muda, sem acoplamento direto |
| Facade | backend/app/patterns/facade/checkout_facade.py |
Simplifica o fluxo de checkout (validação, pagamento, persistência, notificação) em uma única interface |
Frontend: React 18 · TypeScript · Vite · Tailwind CSS
Backend: Python 3.11+ · FastAPI · Pydantic · SQLAlchemy · SQLite
API: REST — documentação interativa via Swagger em /docs
- Listagem de produtos com nome, descrição, preço, imagem e estoque
- Carrinho com adicionar, remover, alterar quantidade, subtotal, frete, desconto e total
- Checkout com nome, e-mail, endereço e forma de pagamento
- Pagamento simulado com Cartão de Crédito, Pix e Boleto (via Factory)
- Criação e persistência de pedidos no SQLite
- Lista de pedidos com detalhes e mudança de status
- Notificações geradas por Observer ao mudar status do pedido (e-mail, painel, console)
cd backend
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
pip install -r requirements.txt
python -m app.seed # carrega produtos iniciais
uvicorn app.main:app --reload- API:
http://localhost:8000 - Docs:
http://localhost:8000/docs
cd frontend
npm install
npm run dev- App:
http://localhost:5173
GET /products
GET /products/{product_id}
POST /checkout
GET /orders
GET /orders/{order_id}
PATCH /orders/{order_id}/status
GET /notifications
- Inicie o backend e execute o seed
- Inicie o frontend
- Adicione produtos ao carrinho
- Preencha o checkout e escolha a forma de pagamento
- Finalize o pedido e veja-o na aba Pedidos
- Altere o status (Pago → Enviado → Entregue)
- Observe as notificações geradas pelo Observer no painel e no console do backend
- Testes unitários para cada padrão de projeto
- Migrar banco para PostgreSQL com Docker Compose
- Deploy com CI/CD (GitHub Actions + Render)
- Adicionar padrão Repository para desacoplar acesso a dados
- Autenticação JWT (cadastro e login de usuário)
- Painel admin para gestão de produtos e estoque
MIT — uso livre para fins de estudo e portfólio.