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

StackOverflow https://stackoverflow.com/questions/25675

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Например,

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top