Muitas dependências em controlador usando VRaptor

11 respostas
anderson_lr

Pessoal,

Tenho um controller que tem muitas dependências injetadas via construtor. Acho muito deselegante isso. O que acham? Existe uma forma de deixar isso mais limpo como VRaptor?

11 Respostas

Rafael_Guerreiro

Existe, se o seu controller está com muitas dependências, é por que ele está fazendo muita coisa.
Tenta quebrar ele. Divide algumas coisas em pacotes internos que dizem respeito à funcionalidade.

Algo como um financeiro:
br.com.seuprojeto.controller
FinanceiroController (faz MTA coisa)

divide em:
br.com.seuprojeto.controller.financeiro
DepositoController
ContaCorrenteContrller
FaturaController
ClientesController

anderson_lr

Cara, na verdade injeto 5 repositórios pra poder montas os selects na tela sabe. Tenho um método formulario() que redireciona para um formulario.jsp, e incluo várias listas no result pra poder montar os selects na tela sabe. Mas acho muito ruim injetar um monte de repositórios no construtor do controller. Sei que também tenho a possibilidade de injetar direto no método como por exemplo formulario(Repositorio primeiro, Repositorio segundo…). Mas mesmo assim não sei se fica legal.

Rafael_Guerreiro

Crie então uma classe que vai injetar esses selects para você. Ela vai receber esses 5 repositórios e mais o result. Ai no seu controller vc chama ela.

anderson_lr

Certo, aí eu injeto ela com todas as dependências. É isso?

Rafael_Guerreiro

Isso. Algo assim:

@Component
public class Classe {
   public Classe(Repo1 r1, Repo2 r2, Repo3 r3, Repo4 r4, Repo5 r5, Result result){
   }

   public void includeSelects(){
   }
}
anderson_lr

O que esse includeSelects() faz?

Rafael_Guerreiro

Me mostra o seu controller com os repositórios e o método que popula os selects da tela…

anderson_lr

Entendi, ele monta as listas e inclui no result, é isso?

Rafael_Guerreiro

Isso mesmo!

O ideal é você ter classes e métodos pequenos. Se o método tiver mais de 10 linhas, divide ele. Se a classe estiver com muitos métodos, atributos, divide ela.

anderson_lr

Certo. Outra dúvida. No meu CursoController por exemplo, preciso de um json de disciplinas que vou buscar via ajax. O mais correto é criar um método listarDisciplinas() no CursoController que retorna um json de disciplinas ou buscar isso de um DisciplinaController?

Rafael_Guerreiro

Depende do que faz mais sentido para você. Uma disciplina pode estar em mais de um curso. Ela é um pouco independente de curso. No meu ponto de vista, vale a pena ter um DisciplinaController e um método list. (não precisa chamar listDisciplinas pois você está no controller de disciplinas. Tenta evitar a redundância também.)

Criado 7 de dezembro de 2012
Ultima resposta 7 de dez. de 2012
Respostas 11
Participantes 2