Хорошо, это, вероятно, было задано раньше, но я не могу найти окончательный ответ. Где в шаблоне MVC должна выполняться проверка ввода?
Я хотел бы сказать, что в контроллере должны происходить такие вещи, как пустые поля и базовая общая проверка, и что правила должны соответствовать длине и допустимым символам, например, именам пользователей / паролям и т. Д. На уровне модели.
Тем не менее, это означает распространение этого бургана вокруг приложения, которое тоже не может быть хорошим?
Извините, если этот вопрос наивен, но я относительно новичок в этом типе программирования и хочу, чтобы все было правильно с самого начала.
Валидация – это работа модели.
Поскольку модели имеют различные атрибуты (поля), только модели могут знать, какая комбинация входов делает эту модель действительной. Дело не только в том, пустое поле или ввод этого поля соответствует некоторому шаблону, но иногда это комбинация полевых входов или отношение модели к другим моделям, которые определяют правильное состояние.
Ваша модель должна инкапсулировать эту логику, чтобы вы могли ее допросить («вы действительны?») И не распространяете ее на другие части вашего кода.
Единого ответа нет. То, что начнет появляться, заключается в том, что валидация не может произойти исключительно на модели, потому что модель не знает об окружающей среде. Ярким примером этого является дублирование имен, где важна уникальность, представляющая визуальную позицию. В тот момент, когда это требование возникает, какая-то валидация будет проходить вне модели, или модель должна осознать свое окружение, которое начинает сцепление.
Я стараюсь максимально приблизить модель к модели, которая относится к модели / требованиям. Как только он выходит за пределы этого, единственное другое место, которое нужно пойти, находится внутри контроллера.
Я согласен с тем, что нет единственного решения .
Я склонен продолжать проверку, связанную с логикой приложения в контроллере . Это имеет большое преимущество в тех случаях, когда модель может меняться (в противном случае вам нужно скопировать проверки во всех моделях).
В модели я просто продолжаю проверку, которая зависит от механизма хранения .
Представление может быть хорошим местом для реализации некоторой проверки на стороне клиента для немедленной обратной связи.
Опять же, это только мое мнение.
Лично я проверяю как в контроллере как в модели, но я склонен придерживаться проверки в контроллере только для того, чтобы убедиться, что определенная функция модели должна быть загружена. Итак, в основном: проверять, чтобы контролировать.
Пример: кто-то пытается обновить определенную информацию, отправив форму на ?p=foo&bar=1&baz=2
. В контроллере я проверю, являются ли значения 1 и 2 действительными числами, и это действительный запрос. Возможно, даже сделайте чек, чтобы узнать, имеет ли пользователь доступ к этой конкретной информации.
Если это так, я вызываю функцию обновления в Модели, которая затем проверяет все опубликованные данные формы. Если нет, обычно это означает, что пользователь не должен быть там в первую очередь, и он даже не доходит до Модели.
Я согласен с Эндрю. Задача модели – следить за проверкой данных. Конечно, вы можете проверить, где хотите, но это лучшая практика MVC, чтобы сделать это внутри модели.