[quote=doravan]Amigos, este tópico não é uma dúvida, é um levantamento de uma discussão.
Recentemente tenho lido vários artigos sobre DAO - ORM - BUSINESS LOGIC no padrão MVC.
Desde antes da existência do Hibernate eu já implementava lógicas baseadas em Dao’s para as minhas Entidades.
Andei lendo alguns materiais sobre descarte da camada Dao porque dizem que “o Hibernate é seu dao”.
Tentei seriamente seguir esse tipo de conceito, onde o meu ORM estaria mais entrelaçado com a lógica de negócios e o resultado foi catastrófico. Tivemos que refatorar muitas linhas de código para separar uma camada Dao, para que pudéssemos encapsular as regras de persistência.
Daí então encontrei um pequeno problema, algumas consultas advém de regras de negócio, elas estão, muitas vezes, diretamente ligadas à camada de persistência.
Pensando nisso resolvi retornar objetos Criteria para a as regras de negócios. Até o momento não precisei remoldar a camada de persistência, pois confio no Hibernate. Porém se um dia eu quiser abstrair o Hibernate vou ter que refatorar toda a regra de negócio novamente.
Sou a favor da separação das regras de negócio das regras de persistência. E vocês, o que opinam em relação a isso?
[/quote]
Realmente vc precisa esquecer os DAOs. Isso é coisa do século passado e EJB 2.1
O que você procura é uma arquitetura com DomainStore, repositorio e query Object
O Hibernate ou o JPA já são implementações do DomainStore (procure Core JEE Patterns 2) e o DAO já morreu. Não é sensato encapsular o DomainStore no num bando de DAOs. Isso é andar para trás.
Mas realmente vc precisa de um objeto que sabe montar as pesquisas. Este papel podia ser do dao nos tempos antigos, mas agora cabe ao Repositorio.
O repositório tem acesso a um DomainStore para invocar as pesquisas, mas pode fazer pesquisa de qualquer outra fonte , como arquivos e webservices.
O repositorio pode ainda acumular a responsabilidade de edição do domaistore (save, delete, etc…) embora isso seja opcional e existem outras formas usando Services.
A chamadas “logicas de negocio” não existem apenas em um andar, embora existam certos objetos que associamos diretamente a elas como validatores e services. Vc tem razão que a criação de consultas e execução de pesquisas no banco faz parte dessa logica de negocio. Agora, isso não significa que toda a logica de negocio tenha que ficar em objetos do mesmo tipo.
Por outro lado DAO-ORM-Business Logic não é o padrão MVC e o padrão MVC não se pode aplicar dessa forma. Ai também, vc tem um problema conceptual. MNV não é separação em camadas e você precisa realmente entender como se separa as camadas e por quê.