| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 09:27:27
|
AntonioMafiotecano
Debugger
Membro desde: 22/06/2006 09:46:21
Mensagens: 54
Localização: Osasco
Offline
|
Fala galera, estou aqui de novo precisando do conhecimento de vcs rs. Acontece o seguinte estamos criando classes DAO para o nosso projeto mas entramos num impasse(escrevi certo?) com um outro programador aqui sobre os metodos de acesso ele diz que esses metodos tem q ser staticos. Estaria ele certo?
Para ilustrar qual dos exemplos abaixo é o correto?
Bean utilizado pelas duas classes DAO
public class TesteBean{
private String nome;
public String getNome(){
return this.nome;
}
public void setNome(String parametro){
this.nome = parametro;
}
}
Classe DAO com metodos não estaticos(nesse caso toda vez q for inserir um bean no banco terei de instanciar uma classe DAO)
public class TesteDAO{
public void inserir(TesteBean instancia){
//codigo
}
}
Classe DAO com metodos estaticos, nesse caso não sera necessario instanciar uma classe DAO apenas para inserir um bean no banco.
public class TesteDAO{
public static void inserir(TesteBean instancia){
//codigo
}
}
Entao galera alguem sabe me dizer qual a maneira correta segundo as espeficicações do DAO?Valeu
|
Sou meu anjo e meu demônio, sou as mãos do meu destino. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 10:04:54
|
Leozin
JWizard
![[Avatar]](/images/avatar/5dca4c6b9e244d24a30b4c45601d9720.png)
Membro desde: 18/06/2005 21:01:26
Mensagens: 2310
Localização: São Paulo/SP
Offline
|
eu não acho legal fazer estático porque você terá que fazer ele ser synchronized (se houver grande número de acessos ao DAO) e, sendo synchronized, além de poder acessas o método somente um usuário (thread) por vez, ele diminui drasticamente o desempenho
faça um bean normal, faça a instância somente na hora que for usar que não haverá esse problema hehe (mas vai comer mais memória do servidor, pode ter certeza)
bom é o que eu acho
|
http://www.leozin.com.br/blog |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 10:09:51
|
AntonioMafiotecano
Debugger
Membro desde: 22/06/2006 09:46:21
Mensagens: 54
Localização: Osasco
Offline
|
Opa valeu. Eu tb prefiro metodos nao staticos, mas o outro programador acha examente o contrario.
|
Sou meu anjo e meu demônio, sou as mãos do meu destino. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 10:19:53
|
drix
JavaBaby
![[Avatar]](/images/avatar/b578f2a52a0229873fefc2a4b06377fa.png)
Membro desde: 16/06/2006 14:42:48
Mensagens: 84
Localização: Maringá - Paraná
Offline
|
Concordo com o Leozin.
Mas para resolver o impasse.. rsrss.
Faça os testes:
- Monte um DAO com métodos estáticos e outro com não estáticos;
- Faça os testes de tempo, e verá que o desempenho realmente cae, compartilhando a mesma classe para múltiplos acessos.
Relato que, tb passe por esta dúvida e estes testes foram decisivos para obter a melhor solução.
|
JDRIx
=/=/=/=/=/=/=/
Café? Servido? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 10:24:54
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Qual o embasamento dele?
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 10:30:19
|
AntonioMafiotecano
Debugger
Membro desde: 22/06/2006 09:46:21
Mensagens: 54
Localização: Osasco
Offline
|
danieldestro wrote:Qual o embasamento dele?
Ele diz que é desnecessario criar uma instancia apenas para inserir um dado, que o metodo seria naturalmente estatico.
Mas me surgiu uma duvida agora.. se eu fizer o DAO com metodo nao estatico e nao sincronizados, como irei impedir q se tente inserir ao mesmo tempo????
|
Sou meu anjo e meu demônio, sou as mãos do meu destino. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 10:45:24
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Com métodos estáticos você terá problemas se usa recursos compartilhados.
Agora, vou provar como seu amigo perde a razão. Num sistema onde você usa um mecanismo mais, digamos, complexo de DAOs e você quer se aproveitar da OO e das possibilidades que o Java te dá, usar métodos estáticos não dá muito certo.
Exemplo:
Como usar o mecanismo:
Agora, pergunta pro seu amigo se ele faz isso com métodos estáticos de uma maneira elegante?!?!?!?!
Com este mecanismo fica MUITO fácil trocar de JDBC pra Hibernate ou qq outra implementação que você faça, até mesmo híbrido, como eu uso aqui, já que é tudo baseado nas interfaces. Aí é só fazer um mecanismo de configurações e voilá!
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 12:02:06
|
AntonioMafiotecano
Debugger
Membro desde: 22/06/2006 09:46:21
Mensagens: 54
Localização: Osasco
Offline
|
danieldestro wrote:Com métodos estáticos você terá problemas se usa recursos compartilhados.
Agora, vou provar como seu amigo perde a razão. Num sistema onde você usa um mecanismo mais, digamos, complexo de DAOs e você quer se aproveitar da OO e das possibilidades que o Java te dá, usar métodos estáticos não dá muito certo.
Agora, pergunta pro seu amigo se ele faz isso com métodos estáticos de uma maneira elegante?!?!?!?!
Com este mecanismo fica MUITO fácil trocar de JDBC pra Hibernate ou qq outra implementação que você faça, até mesmo híbrido, como eu uso aqui, já que é tudo baseado nas interfaces. Aí é só fazer um mecanismo de configurações e voilá!
Eu concordo contigo, valeu pela ajuda. Estou no forum a menos de uma semana e já fui muito ajudado por vcs. Realmente essa comunidade merece a fama que tem valeu
|
Sou meu anjo e meu demônio, sou as mãos do meu destino. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 12:55:25
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Métodos estáticos devem ser evitados a todo custo. Eles criam mais problemas do que resolvem.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 13:42:09
|
Edufa
JavaEvangelist
![[Avatar]](/images/avatar/5747a0021eb349e9c8d3667cf1a5e9ec.jpg)
Membro desde: 18/04/2006 10:20:03
Mensagens: 315
Localização: Curitiba, PR
Offline
|
danieldestro wrote:
Com este mecanismo fica MUITO fácil trocar de JDBC pra Hibernate ou qq outra implementação que você faça, até mesmo híbrido, como eu uso aqui, já que é tudo baseado nas interfaces. Aí é só fazer um mecanismo de configurações e voilá!
Eu uso essa mesma abordagem, mas gostaria de saber como vc faz para fazer esta parte híbrida JDBC + Hibernate. Como não posso mexer no banco e resolvi fazer o modelo de classes mais voltado a OO, acabei ficando com alguns pepinos para fazer a parte hibernate, então uma abordagem híbrida seria o ideal para mim, qq sugestão é bem vinda.
|
Edufa
Curitiba, PR
--
"O estado sou eu". - Luís XIV
"O estado somos nós."- Lênin
"O estado somos eu." - Lula
--
O mundo é deles mas a amazônia é nossa
O petróleo é nosso, mas o gás é deles.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 14:21:11
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Assim como eu tenho PessoaJdbcDAO, eu posso ter PessoaHibernateDAO. Mas é um OU outro. Mesmo assim você pode misturar os dois ali dentro de uma implementação, sem problemas.
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 15:19:35
|
Edufa
JavaEvangelist
![[Avatar]](/images/avatar/5747a0021eb349e9c8d3667cf1a5e9ec.jpg)
Membro desde: 18/04/2006 10:20:03
Mensagens: 315
Localização: Curitiba, PR
Offline
|
danieldestro wrote:Assim como eu tenho PessoaJdbcDAO, eu posso ter PessoaHibernateDAO. Mas é um OU outro. Mesmo assim você pode misturar os dois ali dentro de uma implementação, sem problemas.
Sim até aí tranquilo.
Mas o seu factory ou cria objetos JDBCDao ou HibernateDao, por isso e é por isso q é fácil mudar entre um e outro é só mudar a factory.
No meu caso eu queria q qdo eu chamasse determinados métodos ele usasse outra factory, qual a melhor maneira de fazer isso, se é viável, ou estou complicado e deveria fazer na mão mesmo.
O motivo para essa complicação, é q eu gostaria q no código mesmo ficasse transparente qual a DAO factory q está sendo usada e em algum lugar eu definiria isso. Depois se eu conseguisse reproduzir com hibernate a mesma performance dos casos mais complexos eu mudaria as configurações e não precisaria mexer no resto.
|
Edufa
Curitiba, PR
--
"O estado sou eu". - Luís XIV
"O estado somos nós."- Lênin
"O estado somos eu." - Lula
--
O mundo é deles mas a amazônia é nossa
O petróleo é nosso, mas o gás é deles.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 15:28:42
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Se você faz isso, você está amarrando seu negócio com o tipo específico de implementação de DAO. A solução que mostrei justamente desacopla.
No meu caso eu tenho só um DAOFactory. Ele lê de um arquivo qual classe concreta eu uso para cada interface DAO.
Ex:
meu.dao.PessoaDAO=meu.dao.jdbc=PessoaJdbcDAO
meu.dao.XyzDAO=meu.dao.hibernate.XyzHibernateDAO
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 15:37:29
|
Edufa
JavaEvangelist
![[Avatar]](/images/avatar/5747a0021eb349e9c8d3667cf1a5e9ec.jpg)
Membro desde: 18/04/2006 10:20:03
Mensagens: 315
Localização: Curitiba, PR
Offline
|
Humm, entendi, eu interpretei como se vc tivesse vários DAOFactory um para cada forma de persistencia. Você concentra tudo num único DAOFactory q le esses parâmetros e assim ele sabe qual DAO usar (Hibernate ou JDBC, ou etc), é bem isso que eu precisava, estava quebrando a cabeça, ... Valeu.
|
Edufa
Curitiba, PR
--
"O estado sou eu". - Luís XIV
"O estado somos nós."- Lênin
"O estado somos eu." - Lula
--
O mundo é deles mas a amazônia é nossa
O petróleo é nosso, mas o gás é deles.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2006 16:12:01
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Ok, métodos estáticos não são a melhor opção porque acabam afetando a estrutura OO do sistema. Metodos estáticos não são métodos soltos no espaço, são métodos que pertencem à classe, não ao objeto.
mAs... o que tem a ver o snchronized? Estático ou não, você teria o mesmo problema.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
|
|