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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
1 854
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

Model-view-controller (MVC) is an architectural pattern used in software engineering. Successful use of the pattern isolates business logic from user interface considerations, resulting in an application where it is easier to modify either the visual appearance of the application or the underlying business rules without affecting the other. In MVC, the model represents the information (the data) of the application and the business rules used to manipulate the data; the view corresponds to elements of the user interface such as text, checkbox items, and so forth; and the controller manages details involving the communication to the model of user actions such as keystrokes and mouse movements.

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

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

Например,

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

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

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

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

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

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

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

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

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