Projeto
Tudo o que veio antes, reunido em uma aplicação que pode ir para produção.
Projeto completo com Spring Boot
As sete lições anteriores trataram cada assunto de forma isolada. Este capítulo os reúne em uma aplicação de livraria online, com a divisão em camadas, os repositórios, a paginação, o gerenciamento de transações e os testes. O objetivo não é mostrar uma arquitetura exemplar: é mostrar onde cada armadilha vista anteriormente aparece em um projeto real e qual decisão de design a neutraliza.
O Spring Data JPA adiciona ao JPA um mecanismo que merece atenção: ele gera a implementação dos repositórios a partir do nome dos métodos. Escrever findByAuteurNomContainingIgnoreCase basta para obter a consulta correspondente. É um ganho de tempo real e uma armadilha igualmente real — porque nada no nome de um método diz quais relacionamentos serão carregados, e acabamos caindo nos N+1 sem sequer escrever JPQL.
A organização adotada aqui se apoia em uma única regra, que decorre de tudo o que foi visto: uma entidade nunca atravessa a fronteira da camada transacional. As entidades vivem no serviço, os DTOs saem dele. Essa regra elimina de uma só vez as LazyInitializationException, os N+1 disparados a partir da camada web e os vazamentos de dados internos nas respostas HTTP.
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão