Olá a todos! Atualmente minha arquitetura está assim Controller -> Services -> Repository, para validar as entidades estou utilizando bean validator e para fazer validações de negócio mais complexas estou utilizando a camada service, onde valido por exemplo coisas do tipo: vou vender uma passagem,devo verificar se ainda existem passagens e se uma determinada passagem já foi vendida(apenas exemplo). O problema nessa minha abordagem é que se não tiver mais passagens pra vender lanço uma exception, se a passagem já foi vendida, lanço outra exception, cada condição, exception e trato tudo com try catch no controlador
public class MyController(){
@Post
public void salvar(Coisa coisa){
try{
meuservico.salvar(coisa);
}catch(NegocioException e){
result.redirecTo(MyController.class).formulario();
}
}
}
public class meuServico(){
public void salvar(Coisa coisa){
if(condicao1){
throw new NegocioException("algo deveria funcionar assim");
}
if(condicao2){
throw new NegocioException("algo deveria funcionar assado");
}
repositorioDeCoisas.salvar(coisa);
}
}
bom, de funcionar funciona, mas acho meio chato ficar lançando esse bando de exception, o contolador fica poluido com um monte de try catch e o usuario não sabe de antemão de todos os erros que está cometendo, eu poderia usar um validator customizado ou talvez um bean validator customizado, mas estou sem tempro pra isso nesse projeto. Uma coisa que me veio na cabeça, mas não sei se é um erro de arquitetura ou design, é eu passar o validator do vraptor para o service
public class MyController(){
@Post
public void salvar(@Valid Coisa coisa){
validator.onErrorForwardTo(this).lista();
meuservico.salvar(coisa,validator);
}
}
public class meuServico(){
public void salvar(Coisa coisa, Validator validator){
if(condicao1){
validator.add(new SimpleMessage("coisas deveriam ser assim",null));
}
if(condicao2){
validator.add(new SimpleMessage("coisas deveriam ser assado",null));
}
validator.onErrorForwardTo(this).lista();
repositorioDeCoisas.salvar(coisa);
}
}
é valido fazer isso? qual solução vocês adotariam para validar essa camada extra(Service) ?