В течение некоторого времени я пытаюсь выяснить, где валидация пользовательского ввода должна происходить в приложении Spring MVC. Во многих онлайн-блогах и учебниках я в основном читаю, что контроллер должен проверять ввод пользователей и, если он недействителен, отвечать на запрос пользователя, показывая страницу с сообщением об ошибке. Однако мое нынешнее понимание системы слоев Spring и Spring MVC состоит в том, что контроллер является единственным мелким интерфейсом между логикой приложения (уровнем обслуживания) и "веб-миром", что позволяет использовать сервисный уровень из веб. Кроме того, насколько я вижу, Spring MVC предоставляет только разумные инструменты для проверки в контроллере.
Если теперь проверка выполняется в контроллере, если в какой-то момент я хочу развязать логику приложения из "веб-мира", логика проверки должна быть переопределена в новой среде (например, настольном приложении с использованием Swing). На мой взгляд, способность решать, какие операции являются "действительными" для объектов домена и какие "правильные" состояния могут иметь такие объекты, является основной частью уровня сервиса, а не проблемой какой-либо другой части приложения (например, Контроллеры).
В этом контексте, почему "хорошей практикой" является размещение логики проверки ввода на уровне контроллера, а не на уровне сервиса?