| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/05/2008 15:39:59
|
higorcoelho
Entusiasta Java
![[Avatar]](/images/avatar/a61f27ab2165df0e18cc9433bd7f27c5.jpg)
Membro desde: 14/06/2005 10:36:20
Mensagens: 20
Localização: Fortaleza - CE
Offline
|
Houve uma peleja essa semana e gostaria de extender o assunto ao forum para ver a opinião de outras pessoas.
Você deixaria de lado suas classes DAO e utilizaria apenas o EntityManager injetado diretamente em suas classes de negócio?
O objetivo e colher mais opiniões, argumentos a favor e contra e quem sabe algum case.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/05/2008 17:05:21
|
Maracuja
GUJ Ranger
![[Avatar]](/images/avatar/aceacd5df18526f1d96ee1b9714e95eb.jpg)
Membro desde: 28/03/2006 10:18:44
Mensagens: 940
Localização: Behind the screen
Offline
|
IMHO, eu não faria isso, pelo simples fato (não menos importante) de ter separação entre camadas, e ter uma camada somente de acesso a dados.
|
"Nunca deixarei de reclamar, mas espero reclamar de coisas melhores a cada dia..." Um amigo muito sabio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/05/2008 08:49:41
|
acopiara
JavaChild
![[Avatar]](/images/avatar/720788047c0f22a0d3b25150007b2618.jpg)
Membro desde: 14/11/2006 17:15:33
Mensagens: 149
Offline
|
Grande Igo,
Tá aí minha opinião:
As classes de negócio não devem criar esse mapeamento com o meio de armazenamento, esse papel de fazer o mapeamento dos objetos para qualquer tipo de armazenamento, seja tabelas, xml, csv, é do DAO. Os objetos de negocio não devem nem conhecer como os objetos estão sendo armazenados, e sim conhecer só repositorios. E o DAO ficar sendo a implementação de um Repositório.
[]'s
|
--
Alysson Bandeira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/05/2008 10:48:20
|
Leonardo3001
GUJ Ranger
Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline
|
Primeira verdade universal, até prova em contrário:
"DAO não é repositório."
Repositório, até onde eu sei, serve para buscar objetos, cujos parâmetros devem ser objetos do tipo Criteria, e só. Um DAO está mais para registro que repositório.
Segunda verdade universal, até prova em contrário:
"DAO e mapeamento OR não combinam, pois o primeiro cria contratos orientado a dados e o segundo, a objetos."
Em um mapeamento OR, só existem conceitos como objeto gerenciado e objeto não-gerenciado. Tentar mapear isso para um DAO clássico do tipo CRUD pode ser simplesmente uma dor de cabeça, uma vez que, uma possível implementação de DAO seria dar "detach" dos objetos a serem retornados e depois dar "merge" nos objetos recebidos como parâmetros (é até possível não fazer isso, mas isso implica que o DAO não é o único a fazer alteração de estado na base de dados). Não usar DAOs, deixar que o fim de um request e o começo de um outro façam o "detach" para você, e contar com recursos transacionais do Spring ou do EJB podem ser a melhor alternativa.
|
Leonardo Veríssimo
-------------------------------------------------
Objectzilla |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/05/2008 11:41:29
|
acopiara
JavaChild
![[Avatar]](/images/avatar/720788047c0f22a0d3b25150007b2618.jpg)
Membro desde: 14/11/2006 17:15:33
Mensagens: 149
Offline
|
Nesse post tem uma boa explicação sobre DAO's e Repositorios.
http://blog.fragmental.com.br/2007/03/01/voce-pergunta-001-daos-e-repositorios/
[]'s
|
--
Alysson Bandeira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2008 10:16:11
|
rponte
JavaEvangelist
![[Avatar]](/images/avatar/37a90a1fe7512a804347fa3e572c6b86.png)
Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline
|
Com certeza isso aqui também vai te ajudar a entender melhor a diferença entre repositórios e DAOs,
http://fragmental.tw/2007/11/29/repositories-misunderstandings/
|
Rafael Ponte
http://www.rponte.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2008 12:48:20
|
cmilfont
JavaBaby
![[Avatar]](/images/avatar/4b85256c4881edb6c0776df5d81f6236.jpg)
Membro desde: 23/02/2005 10:58:35
Mensagens: 84
Offline
|
Já que vocês citaram o Shoes, repitam comigo
Repeat After Me: Repositories Aren?t DAOs
http://fragmental.tw/2008/04/25/repeat-after-me-repositories-arent-daos/
|
http://www.milfont.org/tech/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2008 12:50:26
|
Rafael Carneiro
Moderador
![[Avatar]](/images/avatar/895df6a24c45297cb239065bcafa1fa4.jpg)
Membro desde: 31/03/2007 12:40:41
Mensagens: 809
Localização: Fortaleza
Offline
|
"Desta forma o DAO pode se tornar a implementação do Repositório."
Fonte: http://blog.fragmental.com.br/2007/03/01/voce-pergunta-001-daos-e-repositorios/
|
Rafael Carneiro
http://www.rafaelcarneiro.com | @rcarneiro | JForum |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2008 22:25:37
|
tarsobessa
What is classpath?
![[Avatar]](/images/avatar/dda2dd734c4c0462ae1c37edd01d5bcd.jpg)
Membro desde: 05/05/2008 21:31:09
Mensagens: 6
Localização: Fortaleza - CE
Offline
|
Opa! Primeiro post no fórum.
Eu não faria isso porque criaria uma dependência imensa com JPA e limitaria a padronização do uso de outras tecnologias ou frameworks para acesso a dados, como JDBC ou Hibernate. Se numa mesma aplicação há a possibilidade de se usar mais de uma opção, uma abstração como um DAO seria extremamente necessária.
Porque usar mais de uma alternativa? Vai depender do cenário. Se existir a necessidade de performance extrema, porque não usar JDBC com uma consulta nativa e bastante otimizada? O benefício pode valer a pena. Ou efetuar uma chamada a uma stored procedure? Aí é caso a caso.
Então, com relação ao post: sim, eu usaria uma abstração. Agora, se essa abstração seria DAO ou Repository, aí vai depender da moda que você vai querer seguir. Só digo uma coisa: DAO e Repository foram separados no parto. A diferença é semântica.
Sabe a diferença entre EMO e Punk?
|
Tarso Bessa |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2008 23:16:48
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
assunto polemico!
eu nao aconselho, mas tem nomes fortes da comunidade que tem apoiado a ideia... acho que aquele adam bien é um deles
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2008 23:53:38
|
tarsobessa
What is classpath?
![[Avatar]](/images/avatar/dda2dd734c4c0462ae1c37edd01d5bcd.jpg)
Membro desde: 05/05/2008 21:31:09
Mensagens: 6
Localização: Fortaleza - CE
Offline
|
Higor / Igor,
Um outro ponto que eu deveria ter falado no post anterior que tem algo a ver com a minha opinião sobre necessidade de abstração.
Com relação a JPA, sinceramente, eu não entendi a idéia dos responsáveis, ou melhor eu entendi, só não quis acreditar. Lembro-me que quando JPA saiu, vi em algum lugar algo assim: "Pegamos as melhores idéias dos frameworks de persistência e criamos JPA".
Quando fui ver com mais cautela, percebi que JPA era (ainda é) uma versão enxugada do Hibernate e do TopLink. Os recursos mais úteis, como 'query by example', uma API semelhante à de Criteria ou Projections, simplesmente não existem.
Em algumas andanças por aí, percebi que as empresas começaram a adotar JPA, mas implementando dentro de casa a parte que faltava. Em casos piores, usavam o Hibernate como implementação, mas se recusavam a usar seus recursos.
Eu sei que JPA vai melhorar. Muitas coisas boas virão, mas um mecanismo desses não era novidade no mercado. Porque faze-lo tão pobre?
As perguntas são: porque usar JPA? Qual o benefício? Realizar horas de busca no Google? Consumir mais horas de projeto para fazer o mesmo?
Uma abstração poderia te fornecer a oportunidade de usar o mecanismo padrão, mas usando o melhor de cada implementação, quando for necessário. Quando JPA tiver pronta para o mercado, aí é só fazer alterações mínimas só naquela camada.
Acho que é isso.
[]'s
|
Tarso Bessa |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2008 07:21:08
|
rafaelmeireles
JavaTeenager
Membro desde: 13/01/2004 16:12:22
Mensagens: 151
Offline
|
porque usar JPA
acredito que umas das vantagens seria o fato de estar usando uma especificação.
|
Rafael Meireles |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2008 07:58:48
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Eu bem que era a favor de eliminar os DAO's (e/ou Repositorio) por completo. Só acho que o JPA deixa um pouco a desejar neste sentido. JPA + CRUD está legal, só que queries ainda acaba deixando rastros de (hql/jpql) no seu domínio. Uma API de Criteria/Query Object integrado ao JPA tornaria essa discussão bem interessante, mas por enquanto, se o foco é ter um dominio bem legalzinho, sugiro utilizar DAO e/ou Repositorio.
Um dos motivos de eu antigamente apoiar a eliminação dos DAO's era simplesmente diminuir burocracia e dar uma alavancada na produtividade. Felizmente, hoje, com repositório (depois de entender melhor o padrão) consigo uma produtivadade ao meu ver bem melhor, já que não dependo de base de dados e persisto em memória. No final, repositorio é um padrão que deixa claro que não dependo nem um pouco da evolução do JPA.
This message was edited 1 time. Last update was at 06/05/2008 08:02:05
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2008 09:25:00
|
tarsobessa
What is classpath?
![[Avatar]](/images/avatar/dda2dd734c4c0462ae1c37edd01d5bcd.jpg)
Membro desde: 05/05/2008 21:31:09
Mensagens: 6
Localização: Fortaleza - CE
Offline
|
rafaelmeireles wrote:
porque usar JPA
acredito que umas das vantagens seria o fato de estar usando uma especificação.
Rafael, você está certo, mas isso não deveria ser suficiente para adotar uma solução. Ainda prefiro um conjunto de boas práticas e outras coisas mais pontuais para resolução de problemas.
[]'s
|
Tarso Bessa |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/05/2008 11:22:59
|
rafaelmeireles
JavaTeenager
Membro desde: 13/01/2004 16:12:22
Mensagens: 151
Offline
|
com certeza Tarso, isso seria uma das vantagens, a tb outras vantagens além das desvantagens claro.
|
Rafael Meireles |
|
|
 |
|
|