Dúvida no Spring - Usar Servlet ou escrever logica no controller ?

Bom dia pessoal, estou desenvolvendo um sistema, para estudos mesmo, e acabei esbarrando em um momento onde tenho um formulário em uma JSP que seriam alguns parâmetros preenchidos pelo usuário. Eu preciso usar estes parâmetros do formulário em uma classe, para fazer alguns cálculos e assim retornar o resultado em uma outra JSP.

No Controller adicionei o objeto a uma Session, e posso usar um forward para passar para uma Servlet, lá fazer os cálculos e depois mandar para a JSP, porém estou usando Spring MVC. Existe alguma forma melhor ou mais correta de fazer a mesma coisa pelo Spring ? Eu poderia fazer os cálculos dentro do próprio Controller, mas não me parece muito correto, outra forma que pensei seria fazer os cálculos dentro da DAO, mas também não me parece correto, porque ainda não vou gravar estes dados no banco.

Basicamente o desenho acima explica a minha situação ! Qualquer dúvida posso postar os códigos !

Falando em Spring, se você não quer colocar lógica na controller, use uma service.
A servlet tem a mesma responsabilidade que uma controller, logo, não faz sentido usar uma para processar a lógica do negócio…

Então não seria errado escrever toda a lógica dentro do Controller ?

Então, deixa eu tentar explicar algumas coisas.
Existem filosofias que dizem que a controller deve ser agnóstica, quase anêmica (pesquise sobre entidades anêmicas e refatoração do Fowler, não para entender sobre MVC, mas, sobre entidades anêmicas), a ponto de ela só fazer o “roteamento” dos dados. Estas mesmas filosofias defendem que toda a lógica deve ficar no model.
Por outro lado, existe toda uma corrente que diz que a camada de controle deve ser dividida em duas partes, o controle da view (que seria esse roteador) e o controle do modelo (que seria o service), responsável pela implementação da lógica.
Mas, se você pegar materiais criados pelo pessoal do Spring mesmo e entendedores do Spring (como o baeldung), utilizam da lógica na controller mesmo, diretão e, em situações bem específcias, eles ampliam o leque utilizando os services.
Ou seja, você é que vai escolher qual abordagem quer.
Eu, particularmente, fugiria das servlets, colocaria a lógica na controller e utilizaria services e helpers para quebrar em elementos menores e com responsabilidade única.

1 curtida

Apenas complementando, esta thread tem uma explicação bacana sobre as responsabilidades de cada camada no MVC, embora, na prática, isso nem sempre seja utilizado como é sugerido pelo @tdammers.

1 curtida

Puxa, muito obrigado pela aula, vou sim pesquisar sobre tudo isso, e tentar entender melhor, pra poder ter opinião e escolher a melhor forma. Foi muito instrutivo de verdade, te agradeço !