| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2006 16:33:29
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline
|
Boa Tarde Pessoal,
Estou começando a desenvolver utilizando o pattern Dao, e encontrei uma situação em que não sei qual a melhor alternativa.
Meu problema é o seguinte:
No modelo de Banco, eu tenho uma tabela Item, que é especializada em outras duas tabelas, itemTexto e itemImagem.
No diagrama de classes eu tenho uma classe Abstrata Item e as classes ItemTexto e ItemImagem são filhas da Classe Item.
Também tenho uma classe Pagina que é composta por diversos itens (sejam eles ItemTexto ou ItemImagem).
Qual seria a melhor alternativa para na classe Pagina criar um método que crie meus objetos Descendentes de Item a partir do Banco?
Inicialmente eu fiz um método "popularItens()" que instanciava um ItemDAO, e o ItemDAO instanciava ItemTextoDAO e ItemImagemDAO, que retornavam seus respectivos objetos criados a partir das tabelas itemImagem e ItemTexto.
Porem percebi que essa não é uma boa alternativa, pois nos Daos das classes descendentes(ItemTextoDAO e ItemImagemDAO) eu tenho que fazer Join com a tabela de Item para buscar os Campos que são da classe Abstrata Item. Isto me gera varios pontos de manutenção para a mesma consulta.
Bom espero ter sido claro o suficiente, pois descrever um problema assim através de texto é bem difícil. Estou anexando parte do diagrama de classes e do banco para ficar mais claro.
Podem me ajudar a pensar em uma alternativa melhor?
Valeu
|
| Nome do arquivo |
Modelo Banco.JPG |
Download
|
| Descrição |
modelo das tabelas |
| Tamanho |
23 Kbytes
|
| Baixado: |
91 vez(es) |
|
| Nome do arquivo |
classes.jpg |
Download
|
| Descrição |
modelo de classes |
| Tamanho |
23 Kbytes
|
| Baixado: |
97 vez(es) |
|
Rafael Farias Silva (@rafaferry)
Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2006 16:47:21
|
LuizClaudio
JavaEvangelist
![[Avatar]](/images/avatar/a9cf46a38a9b05e959f33215e5cdc38a.png)
Membro desde: 03/04/2006 21:50:51
Mensagens: 388
Offline
|
O que seria um ponto de manutenção? Vc está fazendo várias consultas pra poder pegar os itens no banco, é isso?
Ferryman wrote:Isto me gera varios pontos de manutenção para a mesma consulta.
|
"Porque Deus amou o mundo de tal maneira que deu seu filho unigênito para que todo aquele que nele crê não pereça, mas tenha vida eterna." João 3.16 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2006 16:52:45
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline
|
Luiz, o que eu quis dizer foi que nos DAOS itemTextoDAO e itemImagemDAO eu acabo fazendo JOIN com a tabela ITEM para conseguir buscar os atributos que são da classe abstrata Item. Se futuramente eu tiver outra classe que extends item, o DAO tambem vai ter que fazer o join para buscar os atributos. E se minha tabela de item mudar? vou ter que alterar o comando SQL em todas os DAOS das classes que descendem de item.
Consegui passar a idéia?
valeu
|
Rafael Farias Silva (@rafaferry)
Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2006 17:07:22
|
LuizClaudio
JavaEvangelist
![[Avatar]](/images/avatar/a9cf46a38a9b05e959f33215e5cdc38a.png)
Membro desde: 03/04/2006 21:50:51
Mensagens: 388
Offline
|
Dúvidas/Sugestões:
1-Pq vc tá usando uma classe abstrata, num seria melhor usar interface?
2-Vc pode colocar os sql num arquivo separado...
3-vc pode fazer do ItemDao um classe concreta que pega o Item no banco e passar o item para o construtor das classes ItemTexto e ItemImagem.
o que vc acha?
|
"Porque Deus amou o mundo de tal maneira que deu seu filho unigênito para que todo aquele que nele crê não pereça, mas tenha vida eterna." João 3.16 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2006 17:24:14
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline
|
Bom, neste caso utilizar uma interface não ajudaria já que nas classes ItemTexto e ItemImagem eu teria que implementar todos os gets e Sets, e neste caso, ItemTexto e ItemImagem são um Item.
A idéia de colocar o sql em um arquivo separado é boa, mas não resolve o problema pois eu teria 3 comandos sql usando join com a tabela de item, e se esta tabela mudar, altero os 3 comandos SQL.
ItemDAO já é uma classe concreta, a classe abstrata é a classe Item , assim sendo, nao posso passar item Para o construtor de ItemTexto e ItemImagem.
Estou aqui pensando... ItemDAO (Dao da classe abstrata Item) poderia ter o comando sql nela e eu executaria esse comando nos DAOS das classes concretas que são instanciados na ItemDAO, porem para isso eu preciso passar uma refenrência de ItemDAO ou então deixar um método estatico de obter o comando SQL, o que eu acredito não ser uma boa opção
o que vocês acham?
|
Rafael Farias Silva (@rafaferry)
Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/11/2006 19:22:40
|
[JUZAM]
HelloWorld
![[Avatar]](/images/avatar/138163901f4859c9601f08cfa428efe1.jpg)
Membro desde: 18/05/2006 13:09:54
Mensagens: 14
Offline
|
Usar um ferramenta de ORM não é uma opção para você?
Ela faria grande parte desse trabalho que você está reclamando.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/11/2006 10:12:01
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline
|
É provavelmente resolveria... porem no até 15 de dezembro não terei tempo para estudar uma ferramenta ORM, por isso decidi usar o pattern DAO, assim acredito que quando tiver mais tempo para estudar não terei muitos problemas migrando.
valeu
|
Rafael Farias Silva (@rafaferry)
Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner |
|
|
 |
|
|