Onde fazer a conversão? No bean ou no beanDAO?

Oi gente =)

Eu tava programando aqui um sistema e me veio uma dúvida a respeito de qual seria o padrão, ou o mais certo tendo em vista as “best practices” das responsabilidades de cada classe e tudo mais…

A situação é simples, mas fiquei confuso: Tenho uma classe Cargo, e uma classe CargoDAO (que é a classe responsável por acessar o banco de dados para alimentar os atributos de um objeto Cargo). O ponto é o seguinte, existe uma tabela de cargos que possui dois campos. Um id, do tipo inteiro e um nome de cargo do tipo string… Quando busco os dois campos em um método pesquisaId em CargoDAO para retornar um objeto Cargo, no momento que estou alimentando a instância do objeto Cargo, existe o campo cargo.id que é inteiro. Até aqui é a descrição do cenário. A dúvida é, devo converter a informação do ResultSet para Inteiro dentro da classe CargoDAO ou dentro da classe Cargo criando um novo método setId que recebe string em vez de inteiro?

Os dois funcionam…mas gostaria de saber qual é a meneira padrão, pra desenvolver alinhado com o mercado…

Segue:
Fazer assim ->
Classe CargoDAO, no metodo de pesquisa:
System.out.println(rs.getString("Setando CD_CARGO")); cargo.setCdCargo(rs.getString("CD_CARGO")); System.out.println("Setando NomeCargo"); cargo.setNomeCargo(rs.getString("NOME"));

Classe Cargo, no metodo setCdCargo

public void setCdCargo(int cdCargo) {
		this.cdCargo = cdCargo;
	}
	public void setCdCargo(String cdCargo) {
		this.cdCargo = Integer.parseInt(cdCargo);
	}

Ou fazer assim?

Classe CargoDAO, no metodo de pesquisa:

		System.out.println(rs.getString("Setando CD_CARGO"));
		cargo.setCdCargo(Integer.parseInt(rs.getString("CD_CARGO")));
		System.out.println("Setando NomeCargo");
		cargo.setNomeCargo(rs.getString("NOME"));

Classe Cargo

public void setCdCargo(int cdCargo) { this.cdCargo = cdCargo; }

Vlw galera =)
Abração =D

No meu ver, o melhor é utilizar mesmo a conversão diretamente no DAO, haja visto que sua responsabilidade é trazer dados relacionais (Resultset) e retornar objetos prontos. Um pattern que pode ser aplicado é o Good Citizem - bom cidadão. Este pattern determina que quando uma classe é criada, ele deve estar pronta para uso, assim, ela deve receber no seu construtor tudo o que ela precisa para ficar em um estado válido. Assim, no construtor da sua classe, você passaria os parâmetros dela.
Exemplo, imagina uma classe Cliente. Ao invés de você utilizar os métodos getter/setter para criar a classe, você passaria os valores dos seus atributos no construtor, assim:

Cliente cl = new Cliente(id, nome, endereco);

E no construtor da classe :


public class Cliente {

   public Cliente(Integer id, String nome, String endereco) {
     this.id            = id;
     this.nome      = nome;
     this.endereco = endereco;
   }

}

Você deve manter os seus getters e setter e também um construtor padrão (sem parâmetros), porque os frameworks se utilizam deles para instanciar objetos automaticamente, por exemplo.

Abraço !

Eu tinha pensado em instanciar já passando os parâmetros. Mas me veio uma dúvida: :?
Li em alguns artigos que os beans devem ter getters and setters padrozinados de acordo com o nome do atributo e o construtor não pode receber parâmetros. Então, na verdade, não teria problema contanto que eu tenha pelo menos um construtor isento da obrigação de receber parâmetros para que ainda assim eu possa utilizar a JSTL e continuar com essa classe sendo um bean? Esse negócio de padrões me deixa doido… :stuck_out_tongue:

rsrs… Fico cortando minhas asinhas direto pra tentar fazer de acordo com o que a comunidade aprecia :twisted:

Acredito que o DAO deve retornar o objeto do tipo Cargo prontinho para ser usado, como foi citado anteriormente.

Por que você não dá uma olhada na biblioteca DBUtils? Você não precisa necessariamente usar a biblioteca, mas sim dar uma estudada no código fonte. Você vai ver que lá tem classes utilitárias para ajudar nessas conversões. :wink:

Eita…

Dahora essa classe de converter um result set em vários objetos ______

Vlw Luiz e vlw Thiago \o/

Precisando podem contar comigo ;]