Estou com uma duvida conceitual da melhor forma ou da melhor prática de receber os parametros no controlador .
Exemplo :
Meu objetos de dominio
public class A {
private String atributo1;
private B b;
}
public class B {
private String atributo2;
private String atributo3;
}
Pensando que quero popular apenas 2 atributos de 2 objetos diferentes em cadeia . é mais interessante receber no controlador :
public void metodo(A a) {
......
}
e no form eu utilizo os names a.atributo1 e a.b.atributo3
ou
public void metodo(String atributo1,String atributo3) {
......
}
e no form eu utilizo os names atributo1 e atributo3 e trabalhar de outras formas com o objeto eu mesmo populando o que precisa na camada de negocio ?
Existe uma melhor pratica ? Digo isso porque no primeiro caso quando começo a trabalhar os objetos dentro da camada de negocio e ficar navegando dentro de um objeto que veio do request me incomoda um pouco (brecha pra null pointers … etc) sendo que poderia trabalhar direto o dado sem depender da cadeia de objetos como no segundo exemplo .
// Modelo 1
dao.executaAtividade(a); // Só olhando a implementacao e o jsp daria pra saber qual parametro esta sendo utilizado dentro do metodo
// Modelo 2
dao.executaAtividade(atributo1,atributo2) //Creio ser mais legivel e menos obscuro pra implementacao os dados que ela deve trabalhar
Alguma opinião sobre o assunto ?
Creio que isso dependa do que você pretende fazer, porém, sugiro que deixe teu método o mais generalista possível.
Me desculpe , não entendi mas voce se refere como generalista a solucao 1 ou 2 ?
Me desculpe , não entendi mas voce se refere como generalista a solucao 1 ou 2 ? [/quote]
Qual delas você usa apenas o valor recebido e não invoca o getter de um outro objeto?
Me desculpe , não entendi mas voce se refere como generalista a solucao 1 ou 2 ? [/quote]
Qual delas você usa apenas o valor recebido e não invoca o getter de um outro objeto?[/quote]
A primeira preciso invocar o getter do objeto interno que o proprio Vraptor populou .
Na segunda ja tenho o dado direto e nem preciso ficar invocando o objeto populado da cadeia de objetos pra trabalhar com o dado . Ja que passo pra minha camada de negocio o dado direto vou exemplificar melhor vamos supor que use o modelo 1 :
public void metodo(A a) {
dao.executaAcao(a);
}
//Metodo do dao
public void executaAcao(A a){
//Nada impede ou da a entender a um programador venha nesse ponto e utilize a.getB().getAtributo2() que é null (pra ele saber que é null precisaria ir no formulario ir no controller e ver a chamada
select .... "+a.getAtributo1() +a.getB().getAtributo3()+"...";
}
e agora no modelo 2
public void metodo(String atributo1,String atributo3) {
dao.executaAcao(atributo1,atributo3);
}
//Metodo do dao
public void executaAcao(String atributo1,String atributo3){
//Creio que fique mais legivel desse modo
select .... "+atributo1 +atributo3+"...";
}
Entendeu mais ou menos onde quero chegar ? Entre as diferenças de implementação qual voces utilizariam ?
Depende muito do que se quer fazer, meu caro. Não existe bala de prata.
Se a única necessidade que você tem é a de obter os valores daquelas duas instâncias, então não precisa de mais do que passar as instâncias em si e invocar os getters.
Por outro lado, se você pretende desacoplar o código, sugiro que passe direto os “valores finais” que precisará no método.