Относится ли входной фильтр/код проверки к контроллеру или модели домена?


Я уже некоторое время использую php, но я новичок в OO php. В качестве упражнения для себя я создаю небольшой фреймворк MVC.

Я понимаю, что, вероятно, на это нет окончательного ответа, но мне интересно: где находится входной фильтр/код проверки?

Должно ли это быть частью контроллера, где анализируется запрос?

Или более целесообразно иметь код фильтрации/проверки в модели домена, чтобы каждый объект домена отвечал за проверка собственной информации.

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

Author: user1613053, 2012-08-21

2 answers

Контроллеры обычно обрабатывают данные запроса (GET/POST) и обнаруживают недопустимые отправленные формы, CSRF, отсутствующие поля и т.д. о которых модель не должна беспокоиться. Это наиболее вероятное место, где вы напишете основную часть своего кода фильтрации; проверка должна доходить только до проверки работоспособности на ранний сбой (например, не утруждайте себя отправкой адреса электронной почты модели, если это неверный адрес электронной почты).

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

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

 1
Author: Ja͢ck, 2012-08-22 00:25:02

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

За проверку в основном отвечают доменные объекты , в которых большая часть бизнес-логики домена заканчивается на уровне модели. Некоторая проверка - это то, что можно было бы назвать "проверкой целостности данных" (например, проверка уникальности имени пользователя). Эти ограничения применяются структурой БД (например, с ограничением UNIQUE в данном примере или NOT NULL в некоторых других). Когда вы сохраняете объект домена, используя сопоставитель данных (или какой-либо другой шаблон хранения), он может вызвать некоторые exceptions. Эти исключения также могут быть использованы для установки состояния ошибки для конкретного объекта домена.

Если у вас есть форма, она будет привязана к одному или нескольким объектам домена, которые, когда форма будет опубликована, подтвердят ее. Затем текущее представление запрашивает информацию у слой модели и, если было установлено состояние ошибки, отображает соответствующие предупреждения.

 4
Author: tereško, 2016-12-14 10:04:18