Preenchimento de Objetos

Bom dia!!

Até semana passada eu me utilizada do método construtor para chamar os métodos de acesso ao banco e preencher o meu objeto.
Porém eu descobri q isso não é uma boa prática.

Agora estou tentando fazer de outro jeito. Entaum eu criei o método “find(int ID)” para preenhcer o meu objeto.
Porém eu não sei como deixar a assinatura dele.

Estou em dúvida entre duas opções. A primeira eh essa:

public class Cliente{
public void find(int ID)
}

Chamada:

Cliente cliente = new Cliente();
cliente.find(1);

A segunda opção é essa:

public class Cliente{
public static Cliente find(int ID)
}

Chamada:

Cliente cliente = Cliente.find(1);

Qual dos dois (ou nenhum dos dois) seria mais interessante?

Não é a classe Cliente que deve chamar o banco; você tem de ter uma classe que, a partir do banco, cria elementos da classe Cliente. Veja como isso é feito em frameworks como o Hibernate.

Entaum, quem faz a chamado do banco é uma outra classe. Mas ai eu encapsulo o método da classe de acesso ao banco no meu método Find.

Procure por DAO (data access objects) e veja como funciona este padrão.

Basicamente você terá um ClienteDao, que terá os métodos find, save, update, delete, etc…
A Cliente é um POJO (plain old java objects) e somente terá as informações do cliente em si.

[]'s

Entaum, eu to usando esse padrão. Mas oq acontece, O meu “ClienteDao” não enxerga o meu domínio, ele me retorna apenas as informações do meu cliente. Ai no meu domínio q eu preencho o meu cliente.

Dê uma olhada no pattern Active Record http://en.wikipedia.org/wiki/Active_record_pattern, do livro Patterns of Enterprise Application Architecture de Martin Fowler. Talvez se aplique.
Antecipando, você teria:

static Cliente.find(ID)

  • e -

Cliente.save()

Eh isso ae! Eh algo desse gênero msm! Vlw!
Mas agora soh me preocupa um pouco esse Active Record.
Em outro post me disseram q não é mto recomendado.

Entre o ClienteDAO e a classe Cliente voce pode ter um Repositorio (padrao do Martin Fowler). Assim sua classe cliente fica desacoplada do DAO.

Cliente -> Repositorio -> ClienteDAO -> Banco

Como vc vai usar os metodos save, update, delete, find em varios lugares, o ideal eh vc abstratir isso em um classe para utilizar em varios lugares do seu sistema, como um GenericDAO. Ai cada classe herda desse GenericDAO.

Se for usar JDBC, use Spring p/ facilitar o trabalho.

ActiveRecord pode ser uma opção interessante pra sistemas mais simples do tipo tela-DB. Por exemplo, ActiveRecord é usado pelo Rails. Tem suas vantagens sim.
Mas quem sabe do seu projeto, sua equipe e sua empresa é você… procure ver as vantagens e desvantagens de usar uma ou outra abordagem.