[quote=phstc]quote=sergiotaborda
Então, se quiser utilizar EntityManager não utilize DAO. Se quiser usar DAO, não utilize EntityManager.
Se o EntityManager deve ser injetado nas classes… depende. Para pesquisas não. Devem passar pelo Repositorio apropriado. Para atualizações pode até colocar, mas pode igualmente utilizar o Repositorio para isso caso queira.
Aqui não é muito critico já que em tese vc está invocando o EntityManager de dentro de um serviço ou façade , logo, caso necessário pode ser alterado sem afetar o resto da aplicação.[/quote]
Sergio,
Não criando classes DAO, onde ficaria querys especificas? No próprio Facade ou Services?
[/quote]
Ficam nos Repositorios!!!
No service vc precisa, por exemplo, de todos os clientes que já fizeram compras na loja X. Vc escreve um método no repositorio de Cliente assim
[code]
class RepCliente{
public List encontraPorComprasEmLoja (Loja loja){
// utilize o entity manager aqui para fazer a query
}
}[/code]
e no seu serviço
[code]
class ServicoABC{
public void fazumservicolegal(){
Loja loja = ... alguma loja
List<Cliente> clientes = repCliente.encontraPorComprasEmLoja (loja);
}
}[/code]
[quote=djemacao][quote=sergiotaborda]
Todo o ponto destas conversas é só um : A aplicação NUNCA deve conhecer o sistema de persistencia do seu estado. Quando isso não é isolado o suficiente e ela conhece, o dano está feito. Então o que ha a decidir é o nivel de isolamento da persistencia ( alterações+pesquisa) e ir conforme a decisão.
Desacoplamento Total = Entidades não Anotadas + Repositorio + QueryObject + interface DAO agnostica + Implementação do DAO para a API escolhida.
Acoplamento Total = Entidades anotadas + DAO especifico de negocio e da API escolhida.
Fazer bem não demora mais, apenas tem mais niveis e é preciso mais cuidado com as interfaces dos métodos e a implmentação. Fazer rápido fica pronto antes mas sofre na hora de manter e evoluir.[/quote]
Não quero ser chato, mas vc está sendo xiita. Esquece essa meu. Isso contamina os mais novos
me diz, como vc torna isso prático? Como isso não vai tomar mais o tempo de desenvolvimento? No que ganho a longo prazo?
[/quote]
Sepração de Responsabilidade, Inversão de Controle e encapsulamento. Isso se traduz em :
TDD fácil, DDD simples, DAO reaproveitável entre projetos. Vc pode começar e completar o sistema sem uma única chamada a banco , vc pode dividir o trabalho mais facilmente, em uma palavra vc pode usufruir de OO em sua plena capacidade. Se seguir OO é ser xiita, que seja.
Não.
[quote]
Nada começa completo mas, porém, evolui. Aliás, em Java, tudo é mais lento mesmo. Pior ainda qdo querem fazer a coisa mais “desacoplada” que existe.
Eu uso o Spring, JPA, Hibernate com DAO genérico e pronto. Fica fácil de manutenir e mais simples de entender.[/quote]
Se funciona para vc otimo. Não funciona para mim.