| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 09:50:09
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Bom dia,
Implementei uma factory para camada DAO; e o tipo de retorno destas factories é uma interface IGenericDAO...
Tudo funciona bem, até que eu precisei implementar uma funcionalidade específica, cuja assinatura não existe na IGenericDAO; então para fazer uso deste método eu preciso fazer um casting... e isto está me incomodando pois eu acho que a responsabilidade do casting seria da factory, porém eu não vejo como implementar um modo da factory realizar este casting.
Alguém saberia um modo de realizar este casting na factory?
Obrigado,
Nadilson
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 09:56:57
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Mas sua factory já não retorna um tipo "mais abstrato"? Para que casting dentro da Factory?
Posta o código ai para a gente entender. Não entendi direito sua pergunta.
Até mais!
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 10:07:26
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Olá davidbuzatto,
Eu sei que está difícil enteder mesmo...
Então minha factory retorna o tipo mais abstrato.... acontece que quando eu quero um método específico que eu implementei em uma classe filha, por exemplo :GerenteDAO.getComissoes(); como na interface não tenho esta assinatura... para fazer uso dele eu sou obrigado a fazer o casting...
Segue o código
Obrigado
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 10:26:47
|
rodrigo_ctba
JavaChild
![[Avatar]](/images/avatar/bafd1b75c5f0ceb81050a853c9faa911.jpg)
Membro desde: 20/09/2006 10:38:17
Mensagens: 101
Offline
|
De uma olhada nesse tópico
http://www.hibernate.org/328.html
É um tutorial para criar GenericDAO com o Hibernate.
Com base nesse exemplo consegui fazer um Generec para JDBC.
Qualquer coisa avisa !!!
t+
|
>> Rodrigo Fragoso
>> AdapTI - Soluções em Internet
>> http://www.adapti.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 10:32:29
|
Abdon
JavaEvangelist
![[Avatar]](/images/avatar/c8b981953fcc0fea05c8c.jpg)
Membro desde: 02/09/2003 15:50:05
Mensagens: 363
Localização: São Paulo
Offline
|
eu sou contra daos genericos por este e outros motivos, a solução que eu utilizaria para manter um baixo acoplamento entre sua camada percistente e o resto do sistema, em outras palavras para vc não fazer um cast de um tipo concerto, seria definir outra interface, que implemente os metodos adicionais, o local que vc for utilizar, faça o cast para a interface nova, não para o tipo concreto.
|
What I like about you?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 10:34:02
|
marcelo_mococa
Virtual Machine Man
![[Avatar]](/images/avatar/90248d0a98105fa534cf2b0696ddd12f.jpg)
Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline
|
construir um GenericDao parecido com o do Hibernate com JDBC é um pouco complicado.
Sobre o casting, não vejo problema algum desde que seja para outra interface.
|
Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 10:47:37
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Abdon wrote:eu sou contra daos genericos por este e outros motivos.
Você não utiliza dao genéricos? O que você propõe então?
Obrigado,
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 10:55:07
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
marcelo_mococa wrote:Sobre o casting, não vejo problema algum desde que seja para outra interface.
Então, mas eu estou tentando pensar em um modo que a outra camada nao precise fazer o casting...
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 11:18:30
|
Abdon
JavaEvangelist
![[Avatar]](/images/avatar/c8b981953fcc0fea05c8c.jpg)
Membro desde: 02/09/2003 15:50:05
Mensagens: 363
Localização: São Paulo
Offline
|
eu proponho o contrario do que vc quer: um dao para cada entidade, e cast do lado de quem vai utilizar. Isso para evitar o tipo de problema que vc esta tendo, não tem problema em fazer um cast do lado que vc vai utilizar desde que ele seja feito para uma interface, claro que é possivel evitar este cast fazendo um DAO parametrizado. ele ficaria tipo assim:
Não sei se é exatamente assim que se codifica pois eu não estou acostumado a codificar este tipo de coisa, mais é bem simples, a idéia é esta.
So funfa com java >= 5,0
|
What I like about you?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 11:32:48
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Bem, mas quando você utiliza frameworks ORM como o hibernate, a necessidade de um DAO para cada entidade é QUASE nula... mas entendo o seu ponto de vista e acho totalmente justificável apesar de preferir um abordagem mais generica;
Muito obrigado pela sua ajuda.... vou tentar utilizar o código que vc postou.
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 12:45:24
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
nadilsons wrote:Bom dia,
Implementei uma factory para camada DAO; e o tipo de retorno destas factories é uma interface IGenericDAO...
Tudo funciona bem, até que eu precisei implementar uma funcionalidade específica, cuja assinatura não existe na IGenericDAO; então para fazer uso deste método eu preciso fazer um casting... e isto está me incomodando pois eu acho que a responsabilidade do casting seria da factory, porém eu não vejo como implementar um modo da factory realizar este casting.
Alguém saberia um modo de realizar este casting na factory?
O cast não é tão ruim assim. Desde que vc faça cast de interfaces, é claro. Mas isso é assumir que o usuário da fábrica sabe demais sobre o que a fábrica produz. Isso é errado ? Não completamente, afinal, vc sabe o que uma fábrica de carros (dao) fabrica inclusive os modelos (dao simples, dao extentido) que ela fabrica
Mas como vc sabe sobre os modelos ? Porque a fábrica lhe informa ou porque vc analiza o que sai dela ?
Fazer cast é equivalente a analizar o que sai dela. Ter um método para cada tipo de produto equivale à fabrica informar o que sabe fazer.
Se vc não quer o cast, a solução é obviamente ter um método para cada tipo de dao. Ou em alternativa ter um método genérico, mais ou menos assim:
Uma alternativa seria simplesmente incluir os metodos extra na interface do DAO. Assim fica com apenas um tipo e é mais simples. Quando os métodos não poderem ser usado, simplesmente lance uma UnsupportedOperationException. E deixe claro no javadoc qual método pode ser chamado quando. Este mecanismo é usado pelo Java Collection Framework e funciona. O problema é que esconde a informação até ao momento em que vc executa o codigo, obrigando a ler muito bem o javadoc. No caso do JCF isso faz sentido, no caso de uma fabrica de daos tlv não faça.
Finalmente, uma fabrica de daos é um DAOFactory e não um FactoryDAO (que seria um DAO para objectos do tipo Factory. Compare com ClienteDAO)
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2007 13:10:15
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Olá sergiotaborda,
Sua mensagem me ajudou bastate!!
sergiotaborda wrote:
O cast não é tão ruim assim. Desde que vc faça cast de interfaces,
Realmente estou começando a pensar que o cast nao é tao ruim... e seja realmente necessário.... mudei um pouco a modelagem para fazer com cast.
sergiotaborda wrote:
Uma alternativa seria simplesmente incluir os metodos extra na interface do DAO. Assim fica com apenas um tipo e é mais simples. Quando os métodos não poderem ser usado, simplesmente lance uma UnsupportedOperationException. (...). No caso do JCF isso faz sentido, no caso de uma fabrica de daos tlv não faça.
Entendo que desta forma não seria a melhor escolha... acho q não faz muito sentido para uma fábrica de DAOs
sergiotaborda wrote:
Finalmente, uma fabrica de daos é um DAOFactory e não um FactoryDAO (que seria um DAO para objectos do tipo Factory. Compare com ClienteDAO)
Realmente.... rs; muito obrigado pela elucidação, vou corrigir os fontes.
Mais uma vez, obrigado.
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
|
|