Проверка: Модель или ViewModel - PullRequest
24 голосов
/ 10 августа 2009

Где должна находиться проверка при использовании ViewModel с MVC (MVVM), в Model или ViewModel? (Или оба или ни одного)? И почему? Я говорю об этом особенно в свете выхода версии ASP.NET MVC V2.

А как насчет комплексной / пользовательской проверки?

Ответы [ 3 ]

19 голосов
/ 10 августа 2009

Любая конкретная проверка бизнеса должна быть в Модели. Любая валидация, специфичная для веб-сайта, может быть выполнена как в модели, так и / или в модели представления. Таким образом, ваша бизнес-логика (модели) может перейти за другой интерфейс (Windows, веб-формы и т. Д.), И ваша проверка останется без изменений.

11 голосов
/ 10 августа 2009

Я бы сказал, что это часто необходимо для проверки на всех уровнях:)

Некоторое время я думал о следующем:

  1. Проверка ввода пользователя: определенно на контроллере, а не на модели любого типа. Пример: Captcha .
  2. Просмотр связанных данных, проверенных в ViewModel (не во ViewModel, а в ViewModel). Примеры: Подтверждение пароля , Требуется электронная почта .
  3. Проверка бизнес-правил определенно входит в проверку модели. Примеры: Требуется Email , Купон на скидку должен быть действительным .
  4. Проверка потенциального варианта использования (история, сценарий и т. Д.). Он не проверяет атрибуты, но проверяет правильность всего процесса. Следует перейти к проверке модели (или лучше в отдельном слое). Пример: Только 3 товара можно получить бесплатно в течение недели, если не было заказа положить на данный период .

ПРИМЕЧАНИЕ. Я включил Required Email в 2 и 3, так как он часто зависит от того, где он находится.
Если электронная почта играет только информативную роль - тогда валидация может быть ослаблена и передана в модель представления. Если электронная почта является сильным требованием для приложения - это определенно проверка модели.

Четвертая вещь на самом деле не имеет ничего общего с проверкой, как мы ее понимаем.
Но это также должно быть применено. При этом его результат должен отображаться пользователю.

Практически все 4 типа проверки могут использовать одну и ту же инфраструктуру. Но реализация зависит:) ...

Приветствия
Дмитрий.

5 голосов
/ 10 августа 2009

Модель. Ваша проверка должна быть на уровне вашего бизнеса. Ваша модель вида должна быть только для настройки вашего вида.

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