[RESOLVIDO] MVC sobre o javaBean e DAO

Pessoal,

uma dúvida que me veio aqui, estou tentando fazer um projeto web em MVC e quando comecei a trabalhar a camada de modelo com os beans e daos me veio uma dúvida:
para cada tabela do banco eu terei um javabean e um dao? em casos de relacionamentos(FKs) o correto seria a classe ter o objeto ou apenas um campo Long para o id da fk? ex:

a tabela usuario e endereco, seria correto a classe usuario ter um campo idendereco ou um objeto da classe que sera criada do endereco?

Você cria uma variável de instância do tipo Endereco e não idEndereco.
Assim, você tem acesso a todos os métodos e variaveis da classe Endereco.

class Usuario { private Endereco endereco; //demais campos e métodos de Usuario }

o correto então é fazer um bean e dao para cada tabela do banco? deve ser isso mesmo…

Olá.

Não necessariamente. Geralmente se constrói uma classe DAO para uma Entidade de nível mais acima. Por exemplo, no caso mestre/detalhe, existe uma classe Cliente e uma Endereco, e Cliente tem uma referência a Endereco:

class Cliente {

    private Endereco endereco;
         
    // getter e setter (se necessário)

}

Vamos dizer que pelo entendimento do negócio, Endereco não faça sentido sem Cliente. Endereco é um complemento de Cliente. Não faz muito sentido criar um DAO só para Endereco. Quando você fizer uma consulta de Cliente no ClienteDAO, deve retornar um objeto Cliente já com o Endereco preenchido.

Não. No mundo OO, FKs não fazem sentido. FKs só fazem sentido em bancos relacionais. De qualquer forma você tem que mapear de alguma forma para que vença essas diferenças.
No caso Cliente e Endereço ficaria como o exemplo acima. Quando se fizer a consulta no banco, no ClienteDAO, se trará também as informações do Endereco, se construirá o objeto Endereco e passará para objeto Cliente:

[code]
class ClienteDAO {

public Cliente buscarClientePorNome(String nome) {

   //Código para consultar o banco trazendo as informações de Cliente e Endereco

   Cliente cliente = //Construção do objeto Cliente passando algo para o construtor ou não
   Endereco endereco = //Construção do objeto Endereco passando algo para o construtor ou não
   
   //preenchimento do objeto Endereco

   cliente.setEndereco(endereco);

   //preenchimento do restante do objeto Cliente.

   return cliente;
}

}[/code]

É isso.

Victor Benjamin

Nesse caso, não teria o DAO, mas teria o bean!
bem, já é um avanço! =)

Eu particularmente prefiro criar um DAO para cada bean/mapeamento que tenho.

Imagine que você precise criar uma busca de endereços que referentes a cidade de são paulo. Vc vai criar uma consulta em endereço pelo DAO da usuarios? Dai você estará aumentando o acoplamento e diminuindo a coesão da classe UsuarioDao.

eu adoro essas discussões!!!
romarcio eu pensei exatamente isso, MAS também vi que dentro do escopo da minha aplicação esse tipo de situação n ocorre, como projetos de faculdade são sempre uma correria porque vc tem de fazer tantos documentos que tempo pro código mesmo fica mínimo… então preferi seguir a dica do victor!
mas confesso que fico mais tranquilo sabendo que não há impedimentos em criar o DAO/bean para as tabelas que julgar necessário.