Jump to content

Gerador de DAOs e melhores práticas para DAOs


Destineo

Recommended Posts

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  😛

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,

- Destineo

Link to comment
Share on other 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)

Link to comment
Share on other sites

  • 2 weeks later...

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.

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.