Проверка MVC с использованием аннотаций данных - классы моделей или классы моделей представлений? - PullRequest
10 голосов
/ 27 июля 2010

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

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

Ответы [ 4 ]

10 голосов
/ 27 июля 2010

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

4 голосов
/ 27 июля 2010

Поместите свои аннотации в вашу Viewmodel.

Возможно иметь несколько ViewModel для каждой DataModel, например, DisplayModel, EditModel, ListModel ... все, что может потребовать различных аннотаций.как правило, рекомендуется не подвергать вашу DataModel непосредственному представлению, особенно в сценариях «POST» / Edit.

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

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

1 голос
/ 27 июля 2010

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

0 голосов
/ 27 июля 2010

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

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

Так что для меня возникает пара вопросов:

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

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

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

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

...