Проверка: Модель или ViewModel
Где должна выполняться проверка при использовании ViewModels с MVC (MVVM), на модели или в ViewModel? (Или оба или нет)? И почему? Я расскажу об этом, особенно в свете V2 ASP.NET MVC, который скоро выйдет.
Как насчет сложной/пользовательской проверки?
Ответы
Ответ 1
Любая модель, относящаяся к конкретному бизнесу, должна быть в Модели. Любая проверка веб-сайта может быть выполнена как в модели, так и в /ViewModel. Таким образом, ваша бизнес-логика (Модели) может перемещаться за другим интерфейсом (Windows, Web Forms и т.д.), И ваша проверка останется неизменной.
Ответ 2
Я бы сказал, что часто необходимо проверять на всех уровнях:)
Я некоторое время думал о следующем:
- Подтверждение ввода пользователя: определенно на контроллере, а не на любой тип модели. Пример: Captcha.
- Просмотр связанных данных, подтвержденных в ViewModel (не в режиме просмотра, но в режиме просмотра). Примеры: подтверждение пароля, требуемый адрес электронной почты.
- Валидация бизнес-правил определенно переходит к проверке модели. Примеры: обязательный Email, скидочный купон должен быть действительным.
- Проверка потенциального использования (история, сценарий и т.д.). Он не проверяет атрибуты, а проверяет правильность всего процесса. Следует перейти к проверке модели (или лучше в отдельном слое). Пример: только 3 предмета могут быть получены бесплатно в течение недели, если никакой заказ не был
положить за данный период.
ПРИМЕЧАНИЕ. Я включил Required Email в оба и 2 и 3, поскольку он часто зависит от того, где он принадлежит.
Если электронная почта играет только информативную роль - тогда проверка может быть ослаблена и нажата на модель представления. Если электронная почта является сильным требованием для приложения - это, безусловно, проверка модели.
4-я вещь не имеет никакого отношения к проверке, поскольку мы ее понимаем.
Но он также должен применяться. Таким образом, его результат должен отображаться пользователю.
В принципе, все 4 типа проверки могут использовать одну и ту же инфраструктуру. Но реализация зависит:)...
Cheers,
Дмитрий.
Ответ 3
Модель. Ваша проверка должна быть в вашем бизнес-слое. Ваша модель просмотра должна быть предназначена только для настройки вашего представления.