Laboratório prático para estudo de SOLID, Design Patterns, Clean Code e arquitetura aplicada ao PHP moderno.
Este projeto foi criado como laboratório de estudos para aprofundar conceitos fundamentais de engenharia de software utilizando PHP puro (sem framework, de propósito). O código evolui aula a aula em torno de um mesmo domínio — um pequeno sistema de pedidos/e-commerce — e cada conceito ganha um exemplo executável, documentação e commit próprios.
- S — Single Responsibility Principle →
examples/01-solid/01-srp· doc - O — Open/Closed Principle →
examples/01-solid/02-ocp· doc - L — Liskov Substitution Principle →
examples/01-solid/02-ocp· doc - I — Interface Segregation Principle
- D — Dependency Inversion Principle
- Strategy
- Factory
- Repository
- Adapter
- Decorator
- Builder
- Observer
- Dependency Injection
- Use Cases
- Separação domínio × infraestrutura
- PHPUnit (testes unitários e de integração)
├── README.md
├── docs/
│ ├── solid.md # Princípios SOLID explicados com os exemplos do repo
│ ├── design-patterns.md # (em construção)
│ └── interview.md # (em construção)
└── examples/
└── 01-solid/
├── 01-srp/ # Aula 01 — Single Responsibility Principle
└── 02-ocp/ # Aulas 02–03 — Open/Closed + Liskov Substitution
A estrutura cresce junto com o estudo — cada aula adiciona seu exemplo em examples/
e sua documentação em docs/.
- PHP 8.0+ (os exemplos usam constructor property promotion e named arguments)
Cada exemplo é autocontido e tem um index.php como ponto de entrada:
php examples/01-solid/01-srp/index.php
php examples/01-solid/02-ocp/index.php| Aula | Tema | Status |
|---|---|---|
| 01 | SRP — Single Responsibility | ✅ |
| 02 | OCP — Open/Closed | ✅ |
| 03 | LSP — Liskov Substitution | ✅ |
| 04 | ISP — Interface Segregation | 🔜 |
| 05 | DIP — Dependency Inversion | 🔜 |
| 06 | Strategy | 🔜 |
| 07 | Factory | 🔜 |
| 08 | Repository | 🔜 |
| 09 | Adapter | 🔜 |
| 10 | Decorator | 🔜 |
| 11 | Builder | 🔜 |
| 12 | Observer | 🔜 |
| 13 | Arquitetura | 🔜 |
| 14 | PHPUnit + revisão | 🔜 |
- Reduzir acoplamento
- Melhorar coesão
- Aplicar SOLID no dia a dia
- Preferir composição a herança
- Aplicar Design Patterns com critério (saber também quando não usar)
- Escrever código testável
- Separar domínio e infraestrutura