NHibernate.Validator против DataAnnotations - PullRequest
3 голосов
/ 07 июля 2010

В моем APS.NET MVC проекте я использую DataAnnotations для проверок.

Я перешел из L2S в NHibernate orm и фактически обнаружил, что NHibernate имеет свой собственный валидатор ( NHibernate.Validator )

Имеет ли смысл переходить на NHibernate.Validator?

Например, DataAnnotations имеет атрибут [Обязательный] и NHibernate.Validator [NotEmpty, NotNull, NotNullNotEmpty], и это заставляет меня думать, что использовать.

1 Ответ

3 голосов
/ 07 июля 2010

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

  1. NHibernate.Validators имеетболее богатый набор атрибутов валидации (например, несколько упомянутых выше)
  2. При правильной реализации валидации NHibernate.Validators легче проводить модульное тестирование.

Нет.1 не был огромным для меня, и, возможно, не для вас, так как набор атрибутов в DataAnnotations довольно полный (и вы можете прибегнуть к RegEx, если это необходимо), но нет.2 был для меня большим делом, потому что я хотел иметь возможность включать проверку данных как часть моих модульных тестов модели предметной области, а не тестировать их только через UI / Web-тестирование через WatiN или Selenium.Использование валидаторов также позволило мне смешивать валидацию модели доменной модели (свойство X ИЛИ Y должно иметь значение, но оба не могут иметь значение null) без необходимости переходить в другое место для этого.

Для получения некоторых основных рекомендаций по использованиюNHibernate Validators, ознакомьтесь с этой статьей: http://nhibernate.info/blog/2009/04/02/nhibernate-validator-and-asp-net-mvc.html, и я также рекомендовал бы получить исходный код для архитектуры S # arp, замечательной среды Билли МакКафферти для создания приложений ASP.NET MVC в стиле DDD.В частности, ознакомьтесь с его реализацией Validator и Validator ModelBinder, которые вам необходимо создать для переноса ошибок валидации NHibernate в MVC ModelErrors.Загрузите исходный код S # arpArchitecture здесь: http://github.com/codai/Sharp-Architecture.

Суть заключается в следующем: использование NHibernate.Validators является более расширяемым и тестируемым вариантом, но для его правильного использования потребуется некоторое время.DataAnnotations встроены в среду и с ней легче работать, в этом нет сомнений.

Надеюсь, это поможет.

...