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