Aula 06 - Persistência e Banco
O Controller, então, captura esse erro e "traduz" para o HTTP:
```javascript
// No Controller
try {
await service.cadastrar(dados);
} catch (erro) {
return res.status(400).json({ mensagem: erro.message });
}
5. ViewModels e DTOs (Data Transfer Objects) 📦
Muitas vezes, não queremos devolver todos os dados do banco para o cliente (ex: não queremos devolver a senha!). Usamos DTOs para filtrar o que entra e o que sai do sistema.
🆚 Comparação: MVVM (Mobile/Frontend)
Se você já ouviu falar de MVVM, o Service no Backend é muito similar ao papel do ViewModel no Frontend: ambos lidam com a lógica e os dados, deixando a "View" (ou Controller) limpa de complexidade.
6. Mini-Projeto: Refatorando para Service 🛠️
Imagine o sistema de Transferência Bancária.
1. Crie a função transferir(origem, destino, valor) no Service.
2. Quais validações você faria antes de confirmar a transferência? (Saldo, conta ativa, valores negativos...).
3. Simule o lançamento de um erro caso o saldo seja insuficiente.
7. Exercício de Fixação 🧠
- O que acontece com a manutenção do sistema se um Service for reaproveitado por dois Controllers diferentes?
- Por que o Service não deve saber que o
reqe oresdo Express existem? - Qual a vantagem de "limpar" os dados (DTO) antes de enviá-los ao cliente?
Próxima Aula: Onde guardamos esses dados? Repositories e Banco de Dados (PostgreSQL) 🗄️