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