Bom, andei lendo algumas coisas, refazendo outras, e estou fazendo um teste aqui, gostaria de contar com a opinião de vocês para que considerem esse método como legivel ou não (ele fica em uma classe de repositório.
@Transactional ? Spring @PreAuthorize ? SpringSecurity, serve para antes de executar o método, verificar se o usuário possui a permissão, passando para isso alguns parametros, principal por exemplo, é o objeto do login do usuário @Loggable ? Anottation minha mesmo, que loga o início e execução do método, tal como captura se estourar qualquer exceção. @NotNull ? Outra annotation minha, se o Object ?o? estiver nulo, estoura nullpointerException.
Criando um método assim, me parece que vou conseguir isolar todas as regras na camada correta, sem ter que contar com alguma regra perdida da view. Ou seja, assim conseguiria trocar 100% a view sem perder qualquer regra de negócio.
Me veio na cabeça que está com muitas annotations, mas não sei se isso é problema, pra mim não é. E vocês, o que acham? Está bom assim? E o que vcs acham que eu passe para as Interfaces algumas dessas annotations?
Este tópico ficaria melhor no forum de arquitetura, pra mim está legível. Um ponto que pode ser discutido é sobre o quanto você está dependente de um framework X para sua aplicação funcionar, mas, isso não vem ao caso agora :o)
Lembre-se do fato que o DAO deveria ser “burro”, regras de negocio deveria ficar na camada de baixo (Business Object).
Valeu pela resposta. Realmente, teria ficado melhor lá. Se algum adm quiser, só jumpear aí.
Então, andei lendo algumas coisas (principalmente os textos do ilustrissimo Sergio Taborda) e mudaram muito a minha cabeça de uns 7 meses pra cá.
Todas essas regras que estou colocando ficam no repository mesmo, não na Dao. A Dao é completamente abstrata e a única coisa que faço p/ instanciar uma dao é algo como:
@Autowired
private Dao<MyEntity> dao;
E no caso, a Dao é acessada da Persistence, que é uma camada abaixo do Repository (que contém realmente as regras).
Sobre a questao do framework, bem, eu não encontrei uma alternativa suficientemente robusta e simples como o SpringSecurity. Usar Spring só para injeção de dependências é besteira, mas também é besteira ignorar todo o trabalho que eles tem, e de qualidade, hehe.
Assim, no repositório mesmo, eu vou utilizar Spring na veia pelas facilidades que isso me traz. Mas já na view, vou ser bem mais flexível (são dois projetos 100% separados).