Fala Gabriel, tudo bem ?
Então no início da validação um if
no próprio controller realmente parece fácil de escrever e inofensivo. Mas imagine o caso de validações mais densas, onde muitas informações tem que ser validadas, casos onde é preciso fazer verificações mais complexas buscando informações em bancos de dados, por exemplo. Tudo isso tornaria o código do controller mais complexo do que deveria. Além de ter o código de controle de fluxo da funcionalidade, o controller passa a ser o responsável por implementar a validação, gerando maior dificuldade de manutenção.
Uma ideia simples já seria apenas remover os ifs do controller e levá-los para uma classe específica pra validação. É exatamente essa a ideia apresentada, criamos uma classe de validação (ProdutoValidator
) só que ja usamos o recurso do Spring Validator, implementamos uma interface e delegamos ao Spring a tarefa de aplicar as validações presentes na nossa classe.
O complexidade do código de fato aumenta, mas ganhamos em vários outros pontos, como facilidade de reaproveitamento de código, menor acoplamento entre as classes podendo contar com o container do spring pra gerenciar nossos objetos de validação, menor complexidade das actions dos controllers (sem os vários ifs), uso das classes Utils do Spring para as validações mais simples, e ainda podemos contar com a integração do framework com a Bean Validation.
O intuito de apresentar a técnica é mostrar uma boa prática, que em geral é recomendada ao escrever a aplicação. Não que seja uma obrigatoriedade utilizá-la, mas a solução com os ifs com o tempo pode prejudicar a implementação dos controllers.
Espero ter ajudado no pensamento. Abraço!