MVC - где реализовать проверку формы (на стороне сервера)?
При кодировании традиционного приложения MVC, какова лучшая практика для кодирования проверок на стороне сервера? Код принадлежит контроллеру или уровню модели? И почему?
4 ответа
Из Википедии:
Модель-представление-контроллер (MVC) - это архитектурный паттерн, используемый в разработке программного обеспечения. Успешное использование шаблона изолирует бизнес-логику от соображений пользовательского интерфейса, в результате чего создается приложение, в котором проще изменить либо внешний вид приложения, либо лежащие в основе бизнес-правила, не затрагивая другие. В MVC модель представляет информацию (данные) приложения и бизнес-правила, используемые для манипулирования данными; представление соответствует элементам пользовательского интерфейса, таким как текст, элементы флажков и т. д.; и контроллер управляет деталями, связанными с обменом данными с моделью действий пользователя, таких как нажатия клавиш и движения мыши.
Таким образом, модель - это приложение и бизнес-правила.
Я полностью согласен с Джошем. Однако вы можете создать своего рода слой проверки между Контроллером и Моделью так, чтобы большинство синтаксических проверок могло быть выполнено на данных, прежде чем они достигнут модели.
Например,
Уровень проверки будет проверять формат даты, формат суммы, обязательные поля и т. Д.
Таким образом, эта модель будет просто концентрироваться на бизнес-валидации, например, сумма x должна быть больше суммы y
Мой опыт работы с MVC до сих пор состоит из рельсов.
Rails делает проверку на 100% в модели.
По большей части это работает очень хорошо. Я бы сказал 9 из 10 раз, это все, что вам нужно.
Однако есть некоторые области, в которых то, что вы отправляете из формы, не соответствует вашей модели должным образом. Там может быть некоторая дополнительная фильтрация / перестановка или так далее.
Лучший способ разрешить эти ситуации, которые я нашел, - это создать объекты искусственной модели, которые в основном действуют как объекты модели, но отображают 1-к-1 с данными формы. Эти объекты искусственной модели на самом деле ничего не сохраняют, они просто набор данных с прикрепленными валидациями.
Примером такой вещи (в рельсах) является ActiveForm
Как только данные попадают в них (и они действительны), обычно довольно просто перенести их непосредственно в ваши реальные модели.
Основная проверка синтаксиса должна быть в элементе управления, поскольку он переводит пользовательский ввод для модели. Модель должна выполнить проверку реальных данных.