| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2009 14:03:18
|
ravisantos
Entusiasta Java
Membro desde: 01/06/2009 17:56:34
Mensagens: 18
Offline
|
Olá, pessoal já li várias discussões sobre Repository X Dao aqui no GUJ, mas ainda assim algumas dúvidas persistem. Atualmente
trabalho com uma arquitetura definida assim:
Uma interface Dao
A implementação com Hibernate
Ai quando quero algum metodo novo crio uma interface tipo:
E implemento com um FuncionarioDaoImpl assim:
Ai disponibilizo uma Factory para criação dos Daos onde injeto a Session assim:
Agora minhas dúvidas :
Acabando achando desnecessário interface Dao, pois se por exemplo se amanha quiser mudar a camada de Persistencia para JPa por exemplo, ficaria dificl implentar metodos como findByExample,por isso acho minha interface acoplada demais ao Hibernate.
Então qual seria a desvantagem de não ter interfaces trabalhando direto com a implementação?
Outra dúvida, esse modelo acima, está mais para um Repository ou Dao, muito genta fala que o Repository e uma interface com Semântica melhor do que o Dao então neste caso poderia ter uma interface assim:
O problema aqui é, onde entraria os metodos findAllByExample, no Repository ou nos Dao's?
Como podem ver estou um pouco confuso com estes dos Patterns.
Se alguem puder esclarecer agradeço.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2009 15:20:40
|
m0ska
JavaGuru
![[Avatar]](/images/avatar/2a5b63fbaadcaa8ca0ef6b555fbe0c8a.jpeg)
Membro desde: 28/03/2007 19:20:52
Mensagens: 221
Localização: Maceió-AL
Offline
|
Rapaz, eu uso generic dao e não preciso estar colocando uma interface para cada dão não!
Uso só o daoFactory, o Dao e uma classe específica.. Exemplo UsuarioDao
|
--
Igor Cavalcante |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2009 15:40:07
|
ravisantos
Entusiasta Java
Membro desde: 01/06/2009 17:56:34
Mensagens: 18
Offline
|
Olá moska obrigado pela resposta.
Entao você tem
Interface Dao
HibernateDao implments Dao
e tipo
UsuarioDao extends HibernateDao{
//metodo diferentes
}
Isso?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2009 16:06:31
|
m0ska
JavaGuru
![[Avatar]](/images/avatar/2a5b63fbaadcaa8ca0ef6b555fbe0c8a.jpeg)
Membro desde: 28/03/2007 19:20:52
Mensagens: 221
Localização: Maceió-AL
Offline
|
Vou exemplificar aqui com uma classe simples.
Classe de negócio
Agora meu daofactory que chama os respectivos daos e implementa métodos de conexão.
Agora o dao, que implementa a maioria das tarefas comuns de bancos de dados.
Agora um dao específico de uma classe. Que extende Dao e eu só preciso colocar os métodos que não foram implementados na classe Dao.
Mesmo que não haja nenhum método para ser implementado, eu vou precisar desta classe, para o sistema saber qual a entidade que eu estou usando através de generics.
Qualquer coisa, tamo por aí.
|
--
Igor Cavalcante |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/06/2009 22:15:16
|
rponte
JavaEvangelist
![[Avatar]](/images/avatar/37a90a1fe7512a804347fa3e572c6b86.png)
Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline
|
Não faz muito sentido para a maioria dos casos se ter um DAO quando se está trabalhando com um framework ORM como JPA/Hibernate.
Isso acaba tornando-se um anti-pattern,
http://www.rponte.com.br/2009/06/08/no-more-daos/
|
Rafael Ponte
http://www.rponte.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/06/2009 09:46:46
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline
|
Isso é questionável...
DAO, Repository, whatever... você precisa de alguma coisa para não expôr o mecanismo de persistência para o resto da sua aplicação.
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/06/2009 11:43:44
|
YvGa
Virtual Machine Man
Membro desde: 07/03/2007 15:58:16
Mensagens: 517
Offline
|
Outra coisa questionavel é o findByIsso findByAquilo. Existem algumas formas de se evitar isso, a mais simples com um map propriedade, valor de busca, que torna a interface do dao bem mais simples.
Interfaces normalmente parecem desnecessarias, mas normalmente somos nos que estamos pensando errado. Elas desacoplam completamente as classes clientes das implementacoes, se mesmo com o uso de interfaces elas continuam acopladas é porque estao sendo mal usadas.
Na verdade o que esta sobrando ai na sua aplicacao nao sao as interfaces, mas a factory dos daos. Use Spring e chute essa factory pra longe.
|
Paulo Borio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2009 09:41:43
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
ravisantos wrote:Como podem ver estou um pouco confuso com estes dos Patterns.
Super normal, são confusos mesmo. Você já tentou ler a bibliografia recomendada?
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2009 11:17:20
|
ravisantos
Entusiasta Java
Membro desde: 01/06/2009 17:56:34
Mensagens: 18
Offline
|
Olá, Philip e qual bibliografia seria recomendada?
Valeu
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2009 11:19:20
|
ravisantos
Entusiasta Java
Membro desde: 01/06/2009 17:56:34
Mensagens: 18
Offline
|
YvGa wrote:Outra coisa questionavel é o findByIsso findByAquilo. Existem algumas formas de se evitar isso, a mais simples com um map propriedade, valor de busca, que torna a interface do dao bem mais simples.
Interfaces normalmente parecem desnecessarias, mas normalmente somos nos que estamos pensando errado. Elas desacoplam completamente as classes clientes das implementacoes, se mesmo com o uso de interfaces elas continuam acopladas é porque estao sendo mal usadas.
Na verdade o que esta sobrando ai na sua aplicacao nao sao as interfaces, mas a factory dos daos. Use Spring e chute essa factory pra longe.
Olá, na verdade o findByIsso, findByAquilo, eu resolve com o findByExample do hibernate, onde passo objeto populado com os atributos que quero q ele busque. Desta forma, somente se for uma pesquisa bem específica, como por exemplo misturar um like, com um eq, junto com um group by, é que crio um metodo difirente no XXXDAo especifico;
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2009 19:12:30
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
ravisantos wrote:Olá, Philip e qual bibliografia seria recomendada?
Oi,
Por mim, esta: http://blog.fragmental.com.br/2008/05/20/trilha-de-livros-desenvolvedor/
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2009 21:19:38
|
ravisantos
Entusiasta Java
Membro desde: 01/06/2009 17:56:34
Mensagens: 18
Offline
|
Olá Philip, obrigado pela lista. Excelentes livros, porventura atualmente estou lendo o Fundamentals of object-oriented design in UML, e estou gostando muito.
Mas pelo que li em outros lugares, um repositorio, só faria sentido caso estivesse usando DDD, ou pelo menos um Domain Model, tentando "blindar" a cama de negócios, do contrário, acho que o Dao se encaixa melhor.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/07/2009 11:53:46
|
ravisantos
Entusiasta Java
Membro desde: 01/06/2009 17:56:34
Mensagens: 18
Offline
|
Philip, muitos questionam o uso do Repository com o Dao ou seja o Repositorio sendo um interface para o Dao. Dizem que o dao neste caso nao faz sentido bastando ter por composicao dentro do repositorio, uma Session ou EntityManager.
O que você pensa desta abordagem?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2009 08:01:36
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
ravisantos wrote:
Philip, muitos questionam o uso do Repository com o Dao ou seja o Repositorio sendo um interface para o Dao. Dizem que o dao neste caso nao faz sentido bastando ter por composicao dentro do repositorio, uma Session ou EntityManager.
O que você pensa desta abordagem?
Desde que não haja dependência nenhuma da as classes da Camada de Negócio para Hibernate/JPA/etc. Não há qualquer problema. O que geralmente eu tenho hoje em dia é um UsuarioRepositorio como interface que é implementado por um HibernateUsuarioRepositorio. O primeiro é da Camada de Negócios e o último da Persistência.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2009 08:16:41
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
rponte wrote:Não faz muito sentido para a maioria dos casos se ter um DAO quando se está trabalhando com um framework ORM como JPA/Hibernate.
Eu discordo.
Não necessariamente um DAO, mas acho válido uma camada que abstraia a persistência das minhas entidades de negócio.(DAO, Repository, DataMapper, etc)
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
|
|