MVC - где реализовать проверку формы (на стороне сервера)?

При кодировании традиционного приложения MVC, какова лучшая практика для кодирования проверок на стороне сервера? Код принадлежит контроллеру или уровню модели? И почему?

25.08.2008 05:04:30
4 ОТВЕТА
РЕШЕНИЕ

Из Википедии:

Модель-представление-контроллер (MVC) - это архитектурный паттерн, используемый в программной инженерии. Успешное использование шаблона изолирует бизнес-логику от соображений пользовательского интерфейса, в результате чего создается приложение, в котором проще изменить либо внешний вид приложения, либо лежащие в основе бизнес-правила, не влияя на другие. В MVC модель представляет информацию (данные) приложения и бизнес-правила, используемые для манипулирования данными; представление соответствует элементам пользовательского интерфейса, таким как текст, элементы флажков и т. д .; и контроллер управляет деталями, связанными с обменом данными с моделью действий пользователя, таких как нажатия клавиш и движения мыши.

Таким образом, модель - это приложение и бизнес-правила.

4
25.08.2008 05:09:41

Я полностью согласен с Джошем. Однако вы можете создать своего рода слой проверки между Контроллером и Моделью так, чтобы большинство синтаксических проверок могло быть выполнено на данных, прежде чем они достигнут модели.

Например,

Слой проверки будет проверять формат даты, формат суммы, обязательные поля и т. Д.

Таким образом, эта модель будет просто концентрироваться на бизнес-валидации, например, сумма x должна быть больше суммы y.

4
25.08.2008 05:27:11

Мой опыт работы с MVC пока состоит из рельсов.

Rails делает проверку на 100% в модели.
По большей части это работает очень хорошо. Я бы сказал, 9 из 10 раз, это все, что вам нужно.

Однако есть некоторые области, в которых то, что вы отправляете из формы, не соответствует вашей модели должным образом. Там может быть некоторая дополнительная фильтрация / перестановка или так далее.

Лучший способ разрешить эти ситуации, которые я нашел, - это создать объекты искусственной модели, которые в основном действуют как объекты модели, но отображают 1-к-1 с данными формы. Эти объекты искусственной модели на самом деле ничего не сохраняют, они просто набор данных с прикрепленными валидациями.
Примером такой вещи (в рельсах) является ActiveForm

Как только данные попадают в них (и они действительны), это обычно довольно простой шаг, чтобы перенести их прямо в ваши реальные модели.

0
25.08.2008 07:12:10

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

0
3.09.2008 20:57:27