Aula 04 - Estrutura de Projeto e Camadas 🏗️
Hoje vamos organizar nosso projeto Spring Boot em camadas profissionais — a base de qualquer API bem arquitetada que construiremos no restante do curso.
😊 A Arquitetura em Camadas
Um projeto Spring Boot bem estruturado separa responsabilidades em camadas claras:
- Controller: Recebe requisições HTTP e devolve respostas.
- Service: Contém as regras de negócio.
- Repository: Acessa o banco de dados.
- Model/Entity: Representa os dados do domínio.
📊 Fluxo entre Camadas
sequenceDiagram
participant Cliente
participant Controller
participant Service
participant Repository
participant DB
Cliente->>Controller: GET /produtos
Controller->>Service: listarProdutos()
Service->>Repository: findAll()
Repository->>DB: SELECT * FROM produtos
DB-->>Repository: Dados
Repository-->>Service: Lista de Produtos
Service-->>Controller: Lista de Produtos
Controller-->>Cliente: JSON 🧠 Regra de Ouro: Cada Camada, Sua Responsabilidade
Important
O Controller não deve conter lógica de negócio. O Service não deve saber nada sobre HTTP. O Repository não deve conter regras de negócio, só acesso a dados.
💻 Estrutura de Pastas Sugerida
$ tree src/main/java/com/exemplo/backend
.
├── controller # Classes anotadas com @RestController
├── service # Classes anotadas com @Service
├── repository # Interfaces que estendem JpaRepository
├── model # Classes anotadas com @Entity
└── BackendApplication.java
🧠 As Principais Anotações do Spring
| Anotação | Camada | Função |
|---|---|---|
@RestController | Controller | Marca a classe como responsável por receber requisições HTTP |
@Service | Service | Marca a classe como um Bean de lógica de negócio |
@Repository | Repository | Marca a interface/classe como responsável por acesso a dados |
@Entity | Model | Marca a classe como uma tabela do banco de dados |
📝 Exercícios Progressivos
- Básico: Quais as 4 camadas principais de um projeto Spring Boot organizado?
- Básico: Qual anotação usamos para marcar uma classe Service?
- Intermediário: Por que o Controller não deve acessar o Repository diretamente, pulando o Service?
- Intermediário: O que aconteceria se colocássemos uma query SQL dentro do Controller?
- Desafio: Desenhe (ou descreva) o fluxo de camadas para uma requisição
POST /pedidosque cria um novo pedido.
🚀 Mini-projeto: Crie a estrutura de pacotes controller, service, repository e model no seu projeto Spring Boot, mesmo que ainda estejam vazios.