• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Destineo

Gerador de DAOs e melhores práticas para DAOs

4 mensagens neste tópico

Boas pessoal,

Hoje tenho aqui um quebra cabeças para os que já andam nesta vida do Java há algum tempo. Os mais novos não se assustem nem tenham medo .. os DAOs são nossos amigos  :P

Queria saber se alguém tem conhecimento de algum gerador de DAOs automático que permita:

1. Gerar DAOs simples uni-tabela

2. Gerar DAOs complexos de multi-tabela que possibilite talvez até a inserção em várias tabelas

Para além disso, tenho algumas dúvidas sobre a correcta e boa utilização dos DAOs, ou seja:

Os DAOs podem/devem aceder a mais que uma tabela ? Ou será que quando queremos manipular dados de várias tabelas devemos usar vários DAOs e deixar que seja a camada de Business a manipular os diferentes DAOs ? Qual o critério que devemos usar para saber se devemos ter um DAO a manipular várias tabelas ou não (caso isso seja uma boa prática).

Se conhecerem algum site ou tutorial que tenha informações sobre isto, enviem também.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Depende de que DAO's e que estas a falar. Se usares uma camada de persistencia( tipo hibernate ou torque ou whatever) um gerador automatico nao tevai ajudar muito pois o que tens de implementar sao aquelas querys mais complexas que dependem da tua logica de negocio, se usares JDBC directo ai sim um gerador ja te vai poupar algum trabalho.

Um DAO nao deve corresponder a uma tabela o mapeamento ORM deve ser feito com base em java e java e muito bom a mapear as necessidades da logica de nogocio. ou seja imagina que estas a desenvolver uma aplicacao complexa de uma forma modular se tiverres os DAOs agrupados por tabela de cada vez que queres uma interaccao mais complexa tens de estar a mudar cada um dos DAOs mas se tiveres um DAO ou um grupo de DAOs por modulo so mexes nesses. Os DAOs devem servir so para persistir e fazer querys (mais ou menos complexas) devem encapsular a logica de bd mas podem fazer algumas operacoes complexas, e um pouco ao gosto do fregues e ha varias opinioes. De qualquer forma se baseares o principio de criacao dos DAOs no que te disse vais ver que nao ha assim tanta interaccao entre eles (um DAO devolve-te a maisor parte das coisa que tu precisas)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dos inserts/updates em tabelas diferentes não te safas. Para isso tens que usar os DAOs respectivos a cada tabela. O que se faz, é ter um objecto genérico (Lógica de Negócio), que possui funções de gravação para a base de dados. E nessa função, os DAOs são chamados individualmente. Até porque o conceito de DAO não entra operações de insert (por exemplo) em várias tabelas.

http://www-128.ibm.com/developerworks/library/j-dao/

Este link mostra-te os conceitos sobre DAOs e a sua utilização. Repara também no pormenor do JTA.

A respeito de "motores" de criação de DAOS, vou-te dar 2 que até agora eu tenho boas referencias:

http://www.hibernate.org/

e

http://www.soft32.com/download_122845.html  <- Ao usares este vais ter que fazer algumas alterações nos DAOs. Pelo menos eu fiz... ms isso sou eu que sou um pouco... "mau feitio" com certas cenas. Mas também recomendo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dos inserts/updates em tabelas diferentes não te safas. Para isso tens que usar os DAOs respectivos a cada tabela.

Acho que ha aqui um mal entendido. Não estás bem a perceber o que é um DAO. Na lógica de base de dados tens dois tipos de classes, as entidades transcrevem uma entrada na base de dados e os DAO são classes cujo objectivo é manipular as entidades, aquela classe que dizes ser um objecto genérico que possui funções de gravação para a BD é que é o DAO.

O hibernate não é um gerador de DAOs é uma camada de persistência que te permite fazer o mapeamento entre classes Java e tabelas na base de dados. DAO ou Data Access Object é um padrão de desenho para manipular entidades como por exemplo as do hibernate.

Eu dou um exemplo:

Uma entidade (Como as mapeadas através do hibernate 3 ou EJB3):


@Entity
public class Utilizador{

  private String nome;

  @Id
  private String username;

  private String password;

  public String getNome(){
    return nome;
  }

  public void setNome(String nome){
     this.nome = nome;
  }

  public void setUsername(String username){
     this.username = username;
  }

  public String getUsername(){
    return username;
  }

  public void setPassword(String password){
     this.password= password;
  }

   public String getPassword(){
      return password;
   }

   ...

}

Um DAO que lide com utilizadores poderá ser:


public class UtilizadorDAO {

   @PersistenceContext
   EntityManager entityManager;

   public Utilizador findUtilizadorByUsername(String username){
        return entityManager.find(Utilizador.class,username);
   }

   public boolean isPasswordValid(String username, String password){
      Utilizador utilizador = entityManager.find(Utilizador.class,username);
      return utilizador.getPassword.equals(password);
   }


   ...

}

Neste eemplo muito simples o DAO so acede a uma entidade (que neste caso corresposnde a uma so tabela) mas mas por exemplo poderia haver hirarquias de utilizadores (admins, mods etc) com propriedades especificas e mapeadas a mais do que uma tabela na BD e seria na mesma este o DAO encarregue de manipular essas, demonstrando que os DAOs devem ser utilizador por grupo logico na aplicacao e nao um por tabela.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora