Estou estudando pelo livro “Spring in Action”, e o autor, num de seus exemplos, cria a camada de persistência com o Hibernate e, depois, no capítulo sobre Transactions, ele cria classes que acessam a camada de persistência (ele as chamou de classes Service), como mostra o código de exemplo abaixo:
// classe da persistência
public class LivroDAO {
...
public void addLivro(Livro livro){
currentSession().save(livro);
}
...
}
//classe Service
public class LivroService {
...
public void addLivro(Livro livro){
livroDao.addLivro(livro);
}
...
}
Quando ele falou de transactions programáticas (por código Java e não XML), os códigos da transaction foram adicionados nos métodos da classe LivroService.
Minhas dúvidas são:
-> Por que essas classes que acessam a camada de persistência devem ser implementadas? Elas devem ser implementadas somente quando eu for usar transactions?
-> Como eu usarei as transactions, eu crio um pacote separado para as classes Service (um pacote “service”, por exemplo)?
-> Cada classe DAO terá uma classe Service correspondente?
as vezes queremos controlar a transação pois nem sempre queremos realizar o autocomit, vai depender de regra de negocio do sistema
pensem em um processamento batch, isso vai depender das condições e nem sempre será automatico.
usar ou não o service depende do que voce quer fazer pra isolar o DAO das classes de controle, quase sempre é overhead de codigo inútil pra manter purismo de arquiteto novato.
tenho por mim que nada impede que o EJB seja injetado direto no controler, use servce só quando isso for justificavel, tempo é dinheiro e o cliente nao paga por estes purismos tolos.
acho que essa relação DAO->Service não deve ser 1x1, essa camada Service tem que conter regras de negócio (Nem vou discutir a existência da camada… Sou mais uma abordagem DDD… Mas dependendo do nível de padronização que você precisa não tem como fugir rsrs). Por exemplo: