Проверка MVC с использованием аннотаций данных - классы моделей или классы модели?

Лучше ли применять аннотации проверки данных в модели или модели просмотра? Каковы преимущества/недостатки одного подхода над другим?

Любопытно посмотреть, где все ставят свою проверку, я сейчас делаю это в проекте модели. Однако я видел, как некоторые люди говорят, что это не лучшая практика.

Ответ 1

Что касается лучших практик, я бы сказал: ни в одном из них. Валидация должна быть отдельной. Рамки, такие как FluentValidation, позволяют полностью отделить вашу логику проверки от ваших моделей. Но чтобы ответить на ваш вопрос, я бы поставил валидацию в View Models, так как это классы, к которым вы привязываете свои действия контроллера. Вы также можете иметь несколько моделей просмотра, привязанных к одной и той же модели, но с разными правилами проверки.

Ответ 2

Поместите свои аннотации в свою модель Viewmodel.

Возможно, для каждого DataModel имеется несколько ViewModels, например DisplayModel, EditModel, ListModel.. все, что может потребовать разные аннотации.

Обычно считается лучшей практикой не подвергать ваш DataModel прямому представлению, особенно в сценариях "POST" / "Редактировать".

Я предлагаю прочитать обзор Брэда Уилсона: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

В этих статьях в основном рассматриваются использование шаблонов Dislpay и Edit в MVC2, но наглядно иллюстрируются преимущества использования шаблона ViewModel

Ответ 3

Если вы выполняете единую ответственность, то, вероятно, следует перейти к ее собственному компоненту. При этом, если вы хотите сделать короткое сокращение, все в порядке, но это в ViewModel. Это определенно не должно идти в модели, хотя. Ваша модель должна быть "чистой". Никакие бизнес-правила и валидация не являются бизнес-правилами.

Ответ 4

Хорошо, мое мнение: это зависит. Обычно я контролирую свой вход в контроллерах и моделях, поэтому вход проверяется как в контроллере, так и в модели. Это на случай, если я хочу привязать модель к другому виду приложений. Скажем, WPF.

Однако многие люди также используют "защитное программирование". Это означает, что каждый вход в функцию (параметр) проверяется. В этом случае один вход может проверяться пару раз, но вы гарантируете, что даже если вы что-то измените, логика проверки будет выполнена.

Итак, для меня возникает несколько вопросов:

1) Есть ли вероятность, что может быть сценарий, в котором логика проверки игнорируется. Как привязать модель к приложению wpf.

2) Я хочу снизить производительность за счет обеспечения безопасности, проверив ввод в каждой функции?

Для меня эта статья по вопросам перекрестных разрезов также помогла.

Это мои мысли по этому поводу. Надеюсь, что это поможет.