Проверка данных и форм в архитектуре MVC - PullRequest
8 голосов
/ 03 апреля 2012

Я разрабатываю большинство своих веб-приложений, используя CodeIgniter, и всегда использовал подход проверки данных формы внутри контроллера, используя встроенный класс проверки формы, перед отправкой этих данных в модель, которая будет использоваться, например, вставка данных в базу данных.

Тем не менее, я продолжаю слышать линию «тощие контроллеры, толстые модели» - и мне интересно, следует ли размещать эти проверочные проверки внутри модели.

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

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

  2. Выполняя проверки достоверности в модели, проверяя переменные, предоставленные в методы из контроллера (не данные POST), я потеряю использование класса проверки формы, класса, который я считаю очень полезным в моем проекты. Не могли бы вы предложить мне написать класс или библиотеку, которую можно использовать как библиотеку CI для имитации класса проверки формы, но для предоставленных переменных, а не только для данных POST?

  3. Исходя из этой проблемы ... поскольку данные POST должны быть проверены на существование (isset($_POST['myvar'])) перед передачей в модель, если бы остальная часть проверки не просто помещалась в контроллер а также?

Любые предложения, советы, мнения будут оценены!

1 Ответ

4 голосов
/ 03 апреля 2012

Ваша оригинальная проблема проистекает из того факта, что интерпретация MVC CodeIgniter довольно ужасна. Эта структура притворяется, что View - это просто шаблон, а Model - это просто ORM (, что, по мнению некоторых, должно классифицироваться как анти-шаблон ). Что совершенно неправильно, и заставляет бота вести бизнес и представлять логику внутри контроллера.

Но давайте оставим View в стороне.

Модель в MVC не является классом или объектом. Модель представляет собой слой , который содержит всю бизнес-логику. На самом деле он состоит из экземпляров множества классов. Двумя наиболее распространенными группами являются доменные объекты [ 1 ] [ 2 ] (это то, что люди обычно называют «моделями») и объект, отвечающий за информацию хранение и поиск - обычно DataMappers . Слой модели также содержит автономные компоненты (как ваши, так и сторонние) и абстракции более высокого уровня - сервисы.

То, что у вас есть Validation класс, может рассматриваться как автономный компонент, который может использоваться Доменным объектом для выполнения проверки или ожидать Доменного объекта быть переданным для проверки .. зависит от вашей реализации.

В вашей ситуации я бы справился с этим на уровне сервиса. Который либо предоставит экземпляру класса View допустимый объект домена, либо объект, который представляет ошибку.

Некоторые материалы для чтения, которые могут вас заинтересовать:

Тогда опять .. что, черт возьми, я знаю обо всем этом ..

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