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

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

Ответы [ 4 ]

4 голосов
/ 25 августа 2008

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

Например,

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

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

4 голосов
/ 25 августа 2008

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

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

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

0 голосов
/ 04 сентября 2008

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

0 голосов
/ 25 августа 2008

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

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

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

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

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

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