Подтвердить что ты не робот

В MVC-модели, чья ответственность заключается в том, чтобы дезинформировать ввод?

Простой вопрос: у меня есть настройка Model-View-Controller, а модели - доступ к базе данных SQL. В какой части я должен дезинфицировать/проверять неверные входящие данные?

4b9b3361

Ответ 1

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

Ответ 2

Я бы сказал, что контроллер должен дезинформировать ввод.

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

Ответ 3

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

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

Проверка подлинности в представлении может быть обойдена только в том случае, если у пользователя нет javascript или сообщений в URL-адресе напрямую, однако некоторые проверки в представлении лучше с точки зрения пользователя, так как пользователю не нужно дождитесь возврата с сервера в веб-приложении.

Ответ 4

Модель будет проверять правила бизнес-логики, т.е. требования к длине пароля, если пользователю разрешено выполнять действие или нет.

Очевидно, что модель также должна убедиться, что взаимодействие с базой данных выполняется безопасным образом, так что SQL Injection не представляется возможным.

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

Я бы сказал, что дезактивация продукта также должна идти в контроллере перед передачей в представление.

Ответ 5

Я использую два уровня проверки. Мой контроллер проверяет, что должна быть дата, это дата, int int и т.д. В основном, они могут быть использованы для установки значений на мои объекты.

Затем мой домен имеет проверку на такие вещи, как допустимые значения и другие бизнес-правила. Они ВСЕГДА проверяются перед сохранением или взаимодействием с отредактированным объектом.

Все ошибки с любого уровня возвращаются пользователю, поэтому при необходимости они могут принимать исправление.

Ответ 6

Я склоняюсь к:

  • Поместите синтаксическую проверку в представление ( "это поле числовое", "это поле является датой" ). Это часто очень просто или даже неявно в вашем выборе дизайна представления (например: использование выбора даты для полей даты).

  • Поместите семантическое нарушение в отдельный класс проверки ( "это поле даты должно быть после этого поля даты", "это может быть нулевым, если оно больше нуля" ) и вызывать валидатор с контроллера, передавая ошибки возвращаются к представлению для отображения.

(для моих псевдо-правильных определений синтаксиса и семантики...)