Seguindo a caminhada no uso e entendimento do VRaptor, vou dedicar este post a um assunto trivial para desenvolvedores, Boas Práticas.
Após algum tempo de desenvolvimento com o VRaptor, o desenvolvedor vai perceber um detalhe, a quantidade de atributos que vão sendo utilizados em um Component. Claro isso depende do tamanho da aplicação e também a forma como desenvolvedor desenvolve a mesma.
A quantidade de atributos pode crescer bastante caso o Component possua vários métodos (Logic) que tratam as ações dentro da aplicação.
Detalhe importante, nada que vou descrever aqui é regra para o desenvolvimento de uma aplicação utilizando o framework, são apenas dicas ou melhor dizendo, boas práticas percebidas após um bom tempo de desenvolvimento com o mesmo.
Bom, o tópico abaixo foi o primeiro que identifiquei no desenvolvimento da equipe que coordeno e participo. É um detalhe simples, mas quando adotado pode melhorar em muito o desenvolvimento e os testes da aplicação, assim como tornar mais prático e rápido a produção da equipe.
Atributos com @Parameter ou Métodos com @Logic
Durante o desenvolvimento de uma aplicação pude perceber a grande quantidade de atributos que estava adicionando em meu Component(Controler), isso começou a dificultar a organização e controle em meio a programação e testes.
Sentindo esse desconforto decidi mudar a maneira de tratar atributos que são parâmetros vindos da JSP (VIEW).
Note, toda action de um formulário representa uma Logic de um Component, ou seja, tudo que estiver dentro desse formulário está potencialmente apto a ser um parâmetro para a Logic existente no action. Temos aqui um primeiro caso para verificar. Por exemplo:
A seguir o Component que vai tratar as requisições:
@Component
public class PessoaLogic {
@Parameter
private Pessoa pessoa;
@Parameter
private Caracteristica caracteristica;
public String addCaracteristica(){
this.caracteristicaDao.save(this.caracteristica);
this.pessoa.setCaracteristica(this.caracteristica);
return "ok";
}
}
Até aqui tudo bem, temos apenas dois atributos para um único método dentro do Component, mas façamos um refactoring para observar o quanto mais simples pode ficar.
@Component
public class PessoaLogic {
@Logic (parameters = {"pessoa","caracteristica"})
public String addCaracteristica(Pessoa pessoa, Caracteristica caracteristica){
this.caracteristicaDao.save(caracteristica);
pessoa.setCaracteristica(caracteristica);
return "ok";
}
}
Bem melhor, não? Outro benefício que vejo no uso da anotação @Logic está no entendimento do fluxo da Logic. Veja nesse pequeno trecho temos todas as informações necessárias para saber o que está sendo executado, diferente do primeiro exemplo de código, onde os atributos estão anotados com @Parameter e cedo ou tarde o usuário terá que navegar no fonte para verificar os atributos e a regra que está sendo aplicada dentro do método.
Imagine agora termos um novo método dentro desse Component.
@Component
public class PessoaLogic {
@Parameter
private Pessoa pessoa;
@Parameter
private Caracteristica caracteristica;
@Parameter
private Habilidade habilidade;
public String addCaracteristica(){
this.caracteristicaDao.save(this.caracteristica);
this.pessoa.setCaracteristica(this.caracteristica);
return "ok";
}
public String addHabilidade(){
this.habilidadeDao.save(this.habilidade);
this.pessoa.setHabilidade(this.habilidade);
return "ok";
}
}
Agora de novo, mudando para @Logic:
@Component
public class PessoaLogic {
@Logic (parameters={"pessoa","caracteristica"})
public String addCaracteristica(Pessoa pessoa, Caracteristica caracteristica){
this.caracteristicaDao.save(caracteristica);
pessoa.setCaracteristica(caracteristica);
return "ok";
}
@Logic (parameters={"pessoa","habilidade"})
public String addHabilidade(Pessoa pessoa, Habilidade habilidade){
this.habilidadeDao.save(habilidade);
pessoa.setHabilidade(habilidade);
return "ok";
}
}
Detalhe importante, a String utilizada dentro do parameters da anotação @Logic e o nome utilizado para o parâmetro do método, tem que ser o mesmo utilizado na JSP, senão os mesmos não serão carregados no momento do submit.
Essa anotação vale tanto para requisições GET e POST.
Por isso tenho abusado dessa anotação no desenvolvimento de aplicação que estamos realizando, e sinceramente, ficou muito mais prático e rápido para a equipe o uso da @Logic.