Куда должна идти проверка ASP.NET MVC 2: в классах модели или модели представления?

Я использую automapper для сопоставления моих моделей с классами моделей просмотра, чтобы перейти к моему представлению.

Мой вопрос действительно в том, куда должна идти проверка? Я планировал использовать украшения MetaData - особенность mvc 2.

Но либо в модели, либо в viewmodel? Или в обоих местах?


person Martin    schedule 01.11.2010    source источник


Ответы (5)


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

person Darin Dimitrov    schedule 01.11.2010

Моим ответом будет ViewModel, потому что модель может измениться (например, с использования Linq2SQL на EF). Таким образом, когда вы подключаете другую модель, ваша проверка остается неизменной.

person Arief    schedule 01.11.2010

Я лично проверил 2 места с помощью DataAnnotations. Моя модель не полностью соответствует моему мнению. У меня есть отдельные модели для моих представлений, и я перевожу данные из модели представления в модель. Таким образом, я могу поместить в свою модель представления все, что захочу, и исключить части, с которыми не хочу иметь дело.

Однако я считаю, что у меня есть приложение для Windows и веб-приложение, использующие одну и ту же модель. Таким образом, один и тот же набор правил проверки управляет моделью для всех приложений, а моя модель представления может иметь несколько другие правила, если это необходимо. Конечно, это создает «дублирование логики» - ну, логики проверки.

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

person Josh    schedule 01.11.2010

Вы должны поместить валидацию, специфичную для UI, в ViewModel, а все, что связано с бизнес-процессом или валидацией базы данных, в Model. Они могут перекрываться.

person Andrew Lewis    schedule 03.11.2010
comment
спасибо за комментарий, поэтому я буду использовать аннотации данных как для модели, так и для модели просмотра? (атрибуты) - person Martin; 03.11.2010

Модель должна реализовывать необходимую проверку, чтобы гарантировать, что ее состояние не может стать недействительным; эта проверка определенно относится к модели. например, класс книги должен гарантировать, что его название должно содержать от 1 до 50 символов, его идентификатор должен быть> = 0 и т. д.

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

проверка в представлении должна быть ограничена синтаксическим анализом вводимых пользователем данных на предмет недопустимых данных: анти-xss, sql-инъекция, выход за пределы допустимого диапазона. и т.д

person TimC    schedule 01.11.2010