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?
Socorro, modificaram o DAO
14 Respostas
Sem ver como está é dificil dar um parecer.
Mas sempre dá-se um jeito!
Segue o codigo fonte.
[color=red]Moderador: da proxima vez que postar um codigo enorme destes anexe como arquivo[/color]
isso eh soh a metade… pq ela inteira tava dando pala no forum…
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).
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…
caraca, só pelo tamanho do código já dá pra saber que esta classe é uma perola, hehe. Boa Sorte! :mrgreen:
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
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?
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:
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.
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
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:
Isso não é um DAO é simpelsmente um aglomeradod e funções para SGBD. Estude o padrão e acabe com este monstro.
Cara, isso é só a metade?Huahuaha… tem muito sistema inteiro q não ocupa 3000 linhas…boa sorte com a sua refatoração.Vc vai precisar…