00 - Tipos de Arquiteturas em Camadas
Arquitetura em Camadas
Client
│
▼
Controller
│
▼
Service
│
▼
Repository
│
▼
Database
Responsabilidades
- Controller → Recebe requisições HTTP e retorna respostas HTTP.
- Service → Contém a lógica de negócio da aplicação.
- Repository → Lida com a comunicação com o banco de dados.
- Entity → Representa uma tabela de banco de dados (JPA).
- DTO (Data Transfer Object) → Objeto usado para requisições e respostas de API.
- Config → Classes de configuração do Spring.
- Utility → Funções auxiliares reutilizáveis.
Arquitetura Baseada em Funcionalidades (Package by Feature)
user/
├── UserController
├── UserService
├── UserRepository
├── UserDTO
└── User
product/
├── ProductController
├── ProductService
├── ProductRepository
├── ProductDTO
└── Product
Cada funcionalidade contém todas as classes relacionadas a uma capacidade de negócio específica.
Arquitetura Hexagonal (Ports & Adapters)
Comumente utilizada em grandes aplicações corporativas, fintechs e bancos.
Controller
│
▼
Application Service
│
▼
Domain
▲
│
Repository Interface
▲
│
JPA Repository
A camada de domínio não depende de Spring, HTTP ou do banco de dados.
Vantagens
- Fácil de testar
- Pouco acoplada
- Fácil de substituir o banco de dados
- Fácil de substituir REST por Kafka, GraphQL ou gRPC
Arquitetura Limpa
Uma evolução da Arquitetura Hexagonal.
Controller
│
▼
Use Cases
│
▼
Domain
│
▼
Infrastructure