Где происходит проверка ввода в MVC? - PullRequest
14 голосов
/ 11 октября 2010

Хорошо, возможно, об этом уже спрашивали, но я не могу найти убедительный ответ.Где в шаблоне MVC должна происходить проверка ввода?

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

Тем не менее, это означает распространение этого бурдона по приложению, которое также не может быть хорошим?

Извините, если этот вопрос наивный, но я относительно новичоктип программирования и хотите, чтобы все правильно с самого начала.

Ответы [ 5 ]

6 голосов
/ 11 октября 2010

Проверка - это работа модели.

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

3 голосов
/ 11 октября 2010

Нет однозначного ответа. То, что начнет появляться, - то, что проверка не может происходить исключительно в модели, потому что модель не знает своего окружения. Ярким примером этого являются повторяющиеся имена, где уникальность имеет значение визуальной позиции. В тот момент, когда требования появляются, какая-то проверка происходит вне модели, или модели придется осознавать свое окружение, которое начинает связь.

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

2 голосов
/ 11 октября 2010

Я согласен с тем фактом, что нет единственного решения .

Я склонен сохранять проверку, которая связана с логикой приложения в контроллер .Это дает большое преимущество в тех случаях, когда модель может варьироваться (в противном случае вам необходимо повторить проверки во всех моделях).

В модели , я просто продолжаю проверку , которая зависит от механизма хранения .

* Представление может быть хорошим местом для реализации некоторой клиентской стороныпроверка , для немедленной обратной связи.

Опять же, это только мое мнение.

1 голос
/ 11 октября 2010

Лично я проверяю в контроллере как модель, но я склонен придерживаться проверки в контроллере только , чтобы убедиться, что определенная функция модели должна быть загружена. Итак, в основном: проверить, чтобы контролировать.

Пример: кто-то пытается обновить определенную информацию, публикуя форму до ?p=foo&bar=1&baz=2. В контроллере я бы проверил, являются ли значения 1 и 2 действительными числами, и это правильный запрос. Может быть, даже проверить, есть ли у пользователя доступ к этой конкретной информации.

Если это так, я вызываю функцию обновления в Модели, которая затем проверяет все опубликованные данные формы. Если нет, то обычно это означает, что пользователь не должен быть там в первую очередь и даже не достигает Модели.

0 голосов
/ 11 октября 2010

Я согласен с Андреем.Задача модели - заботиться о проверке данных.Конечно, вы можете проверять в любом месте, но MVC рекомендует делать это внутри модели.

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