Socorro, modificaram o DAO

14 respostas
marcos.junqueira

Bom pessoal, peguei um sistema pra continuar a desenvolver ele usa o modelo DAO para persistencia de dados, soh q o cara q fazia antes modificou para que as functions e procedures pudessem ser rodadas de qualquer SGBD ele criou uma classe grandona q controla todas as operações do bando… desde conexao e cadastro até os procedures.
Minha dúvida, será q dah pra continuar a usar o DAO e ainda assim deixar o sistema portável para vários SGBDs?
Tinha pensado em voltar para o DAO puro e deixar as functions e procedures em um classes separadas
alguem tem outra idéia interessante?

14 Respostas

danieldestro

Sem ver como está é dificil dar um parecer.
Mas sempre dá-se um jeito!

marcos.junqueira

Segue o codigo fonte.

[color=red]Moderador: da proxima vez que postar um codigo enorme destes anexe como arquivo[/color]

marcos.junqueira

isso eh soh a metade… pq ela inteira tava dando pala no forum…

jcatino

O problema não é ser um DAO, mas ter colocado tudo numa classe só.

Para mim deveria ter:

  • uma classe ‘PrincipalDAO’ com a parte básica de pegar conexão, fechar, etc.
  • uma classe para cada tabela/assunto. Por exemplo, PerfilDAO com criar/ver/listar/excluir perfil, extendendo a PrincipalDAO

Isso vc faz bem rápido num IDE qualquer, e ficam classes bem mais administráveis e componentizadas.

Mas tenho más notícias para vc:

-> não está usando procedures, usa o select direto (argh, bom, cada um usa de um jeito, isso não é problema, mas vc mencionou ‘procedures’)
-> não vai funcionar para qualquer SGBD, parece que está preparado para Oracle (os ‘like’ pelo menos, não achei nenhum ‘join’ para tirar a dúvida).

marcos.junqueira

então cara… não fui eu q desenvolvi isso ai não… nunca faria isso…
primeiramente tinha pensado do jeito q vc falou, uma classe principal e seguida das outras, mas dai o cara q fez me disse q poderia ficar mudando de BD… hj está no postgresql, mas podera rodar no mssql ou no oracle…
sabe como q eh… dar manutençao no codigo dos outros eh foda…

Thiago_Senna

caraca, só pelo tamanho do código já dá pra saber que esta classe é uma perola, hehe. Boa Sorte! :mrgreen:

Luca

Olá

Qual a utilidade de um DAO para funcionar com vários bancos de dados?

Sua aplicação usa mais de um banco?

Isto em 0,000001% dos casos pode acontecer.

  • Caso afirmativo use o Hibernate que faz isto de forma mais padronizada.

  • E caso negativo, use o Hibernate que tem muitas outras vantagens.

[]s
Luca

marcos.junqueira

Usa um Banco de dados somente, mas pode ser qualquer um.

Então pensei em algo como uma super classe e outras que vão derivando dela:
ex: Conexao (Super Classe), ConexaoPostgreSQL, ConexaoOracle, ConexaoMSSQL, ConexaoMySQL (subclasses)
dai poderia rodar uma instancia da aplicação em PostgreSQL outra em Oracle…

O que me dizem disso?

jcatino

marcos.junqueira:
então cara… não fui eu q desenvolvi isso ai não… nunca faria isso…
primeiramente tinha pensado do jeito q vc falou, uma classe principal e seguida das outras, mas dai o cara q fez me disse q poderia ficar mudando de BD… hj está no postgresql, mas podera rodar no mssql ou no oracle…
sabe como q eh… dar manutençao no codigo dos outros eh foda…

Eu não disse que foi vc, entendi que era código herdado.
Estou te falando o que fazer para reaproveitar o código atual.

Se fica mudando o BD, mesmo assim vc teria uma DAO para cada entidade !

Os patterns de DAO prevem que vc faça algo como PerfilOracleDAO, PerfilMySQLDAO, etc.

Daí sua PerfilDAO seria uma interface, e cada classe específica de um certo BD é uma implementação.

Mas para falar a verdade jamais usei isso.

A melhor forma de deixar portável (até certo ponto) é o que eu disse de encapsular em procedures.

Mesmo assim, JAMAIS isso seria justificativa para colocar tudo numa puta-enorme-big-gigante classe meu-unico-dao-do-sistema-todo.java :twisted:

jcatino

marcos.junqueira:
Usa um Banco de dados somente, mas pode ser qualquer um.

Então pensei em algo como uma super classe e outras que vão derivando dela:
ex: Conexao (Super Classe), ConexaoPostgreSQL, ConexaoOracle, ConexaoMSSQL, ConexaoMySQL (subclasses)
dai poderia rodar uma instancia da aplicação em PostgreSQL outra em Oracle…

O que me dizem disso?

Também … mas raramente vc vai usar isso. Porque o pior não é a conexão mudar (usualmente nesse caso só muda a forma de conexão ou tão somente a string), o problema são os selects mudarem.

A sintaxe de SQL é diferente de um banco para outro. Logo, só a conexão não garante portabilidade.

Eduardo_Bregaida

Luca:
Olá

Qual a utilidade de um DAO para funcionar com vários bancos de dados?

Sua aplicação usa mais de um banco?

Isto em 0,000001% dos casos pode acontecer.

  • Caso afirmativo use o Hibernate que faz isto de forma mais padronizada.

  • E caso negativo, use o Hibernate que tem muitas outras vantagens.

[]s
Luca

Faz isso que o Luca disse, tive o msm problema q vc e o Hibernate me salvou…

[]s

marcos.junqueira

jcatino:

Eu não disse que foi vc, entendi que era código herdado.
Estou te falando o que fazer para reaproveitar o código atual.

Se fica mudando o BD, mesmo assim vc teria uma DAO para cada entidade !

Os patterns de DAO prevem que vc faça algo como PerfilOracleDAO, PerfilMySQLDAO, etc.

Daí sua PerfilDAO seria uma interface, e cada classe específica de um certo BD é uma implementação.

Mas para falar a verdade jamais usei isso.

A melhor forma de deixar portável (até certo ponto) é o que eu disse de encapsular em procedures.

Mesmo assim, JAMAIS isso seria justificativa para colocar tudo numa puta-enorme-big-gigante classe meu-unico-dao-do-sistema-todo.java :twisted:

Então cara eu dei uma procurada no google e achei isso ai q vc disse (http://javaboutique.internet.com/tutorials/ApacheDAOs/index-2.html)
Comecei a implementar aqui e achei muito interessante…

Quanto ao uso de Hibernate eu tenho q ver com o chefe primeiro… hehehe :lol:

pcalcado

Isso não é um DAO é simpelsmente um aglomeradod e funções para SGBD. Estude o padrão e acabe com este monstro.

Ironlynx

Cara, isso é a metade?Huahuaha… tem muito sistema inteiro q não ocupa 3000 linhas…boa sorte com a sua refatoração.Vc vai precisar…

Criado 30 de agosto de 2006
Ultima resposta 31 de ago. de 2006
Respostas 14
Participantes 8