Olá, Luis! Como vai?
Essa é uma questão comum quando trabalhamos com muitos casos de uso em um controlador. Uma abordagem para resolver isso é utilizar um padrão de projeto chamado "Command Pattern" ou "Service Locator". Vou te explicar como cada um pode ajudar:
Command Pattern:
- Você pode criar uma interface comum para todos os casos de uso, por exemplo,
UsuarioCommand. - Cada caso de uso implementaria essa interface.
- No
UsuarioController, você teria uma lista ou mapa de comandos em vez de injetar cada um individualmente. - Isso permite adicionar novos casos de uso sem modificar o construtor do controlador.
public interface UsuarioCommand {
void execute();
}
public class CriarUsuario implements UsuarioCommand {
public void execute() {
// lógica para criar usuário
}
}
// No controlador
private final Map<String, UsuarioCommand> comandos;
public UsuarioController(Map<String, UsuarioCommand> comandos) {
this.comandos = comandos;
}
Service Locator:
- Você pode criar um serviço que localiza e fornece a instância correta do caso de uso.
- Isso reduz a quantidade de dependências diretas no controlador.
public class UsuarioServiceLocator {
private final Map<String, Object> casosDeUso;
public UsuarioServiceLocator() {
casosDeUso = new HashMap<>();
casosDeUso.put("criar", new CriarUsuario());
// adicionar outros casos de uso
}
public Object getCasoDeUso(String nome) {
return casosDeUso.get(nome);
}
}
// No controlador
private final UsuarioServiceLocator serviceLocator;
public UsuarioController(UsuarioServiceLocator serviceLocator) {
this.serviceLocator = serviceLocator;
}
Essas abordagens ajudam a manter o controlador mais limpo e escalável. Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.