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