Правильный способ проверки модели в ASP.NET MVC 2 и ViewModel apporach - PullRequest
2 голосов
/ 25 апреля 2010

Я пишу приложение ASP.NET MVC 2 с использованием шаблона NHibernate и репозитория. У меня есть сборка, которая содержит мою модель (бизнес-сущности), более того, в моем веб-проекте я хочу использовать плоские объекты (возможно, с дополнительными свойствами / логикой) в качестве ViewModels. Эти виртуальные машины содержат специфичные для пользовательского интерфейса метаданные (например, DisplayAttribute, используемый методом Html.LabelFor ()).

Проблема в том, что я не знаю, как реализовать проверку, чтобы я не повторял себя на разных уровнях (в частности, правила проверки пишутся один раз в Model и распространяются во ViewModel).

Я использую DataAnnotations в моей ViewModel, но это означает, что никакие правила проверки не накладываются на саму модель. Один из подходов, который я рассматриваю, заключается в извлечении объектов ViewModel из бизнес-объектов, добавлении новых свойств / переопределении старых, сохраняя таким образом метаданные проверки между ними, однако это уродливое решение.

Я видел проект Automapper, который помогает сопоставлять свойства, но я не уверен, что он может правильно обрабатывать метаданные проверки ASP.NET MVC 2. Сложно ли использовать пользовательские рамки проверки в asp.net MVC 2?

Есть ли у вас какие-либо шаблоны, которые помогают сохранить СУХОЙ в отношении проверки?

1 Ответ

2 голосов
/ 25 апреля 2010

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

В вашем случае - в пользовательском интерфейсе проверьте логику пользовательского интерфейса (реквизиты модели представления не должны быть нулевыми, в правильном формате и т. Д.), На бизнес-уровне - проверьте бизнес-логику (на счете есть деньги и т.

Не используйте DRY в качестве предлога для нарушения SRP! : P

Предполагается, что модели представлений отсоединят ваш бизнес-уровень от роли презентации.
Не склеивайте всё снова.


Я думаю, Automapper не может справиться с этим. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...