Muitas dependências em controlador usando VRaptor

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?

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

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.

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.

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

Isso. Algo assim:

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

   public void includeSelects(){
   }
}

O que esse includeSelects() faz?

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

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

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.

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?

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.)