Где проверить данные в веб-приложении (используя Spring) - PullRequest
2 голосов
/ 06 июня 2011

Это продолжение моего вопроса Spring Web MVC - проверка параметров отдельных запросов .

Я выяснил, как вызывать Spring Validator для доменных объектов, которые были созданы из моих входных данных, и как этот валидатор должен учитывать аннотации JSR-303 для моих классов. Часть, которую я не могу понять, где в моем коде выполнить эту проверку. Очевидный подход заключается в том, чтобы сделать это в контроллере и вернуть другую модель и представление в случае сбоя проверки.

Но у меня также есть сервисный слой, который иногда получает вызовы для создания / обновления объектов из источников ввода, отличных от веб-контроллера. Так что заманчиво реализовать проверку там, но единственный очевидный способ сообщить о сбое - выдать исключение. Я вижу, что Spring предоставляет BindException , но Javadoc также в основном говорит не использовать его в коде приложения.

Что такое обычная / рекомендуемая практика здесь?

Ответы [ 4 ]

6 голосов
/ 06 июня 2011

Я думаю, что ответ оба.

Контроллеры связаны с представлениями.Вы не хотите, чтобы проверка исчезала при изменении технологий просмотра.

Службы должны предполагать, что никто не находится в безопасности, и проверять все входящие параметры.

1 голос
/ 06 июня 2011

Все остальные ответы хороши, я просто сформулирую одно важное правило:

Каждая подсистема / слой должен проверять свои входные данные, независимо от того, откуда они.

1 голос
/ 06 июня 2011

Когда вы инкапсулируете логику проверки в ValidationService, вы можете использовать ее в своих контроллерах и сервисах. Поскольку вы хотите, чтобы пользователь взаимодействовал с вводом и исправлял неверную информацию, вы должны иметь возможность отображать проблемы проверки в вашем веб-представлении.

Иногда у вас могут быть данные (CommandObjects, Forms), которые непосредственно не видны на уровне службы, и затем необходимо выполнить проверку в контроллере, который затем передает информацию на уровень службы.

Когда вы разрабатываете свое приложение, вы должны думать о взаимодействии между каждым уровнем. Смешанная логика проверки на каждом уровне может не потребоваться. Подумайте, как данные попадают в вашу систему. Если контроллеры являются вашей основной точкой входа, вы можете прекрасно разместить их там, поскольку никакие данные не попадают в ваши службы без прохождения проверки.

0 голосов
/ 06 июня 2011

По крайней мере, вы должны проверить входные данные на сервисном уровне, чтобы гарантировать правильность.Кроме того, вы можете проделать валидацию дальше, чтобы повысить удобство использования и т. Д. При необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...