流畅的验证,域和ViewModels

Fel*_*ani 4 validation asp.net-mvc domain-driven-design viewmodel fluentvalidation

我一直在用asp.net mvc,nhibernate和ddd概念开发一个web应用程序.

我已经为我的域类开发了Fluent验证的验证,它工作正常.那么,现在,我需要一个ViewModel来编辑View中的实体,所以我的问题是,我是否需要创建另一个验证类来验证我的viewmodel?或者我应该怎么做以解决这种情况?

我问它是因为我不想打破DRY(不要重复自己)concetp.

谢谢!

Bon*_*nyT 6

域级验证和视图模型验证是完全不同的(虽然它们可以有很多重叠).

例如,在数据库中将某个字段设置为null可能是完全允许的,但需要在某些webforms上输入它.在这种情况下,您将在模型验证中检查null.

多个客户端应用程序共享相同的域控制器(例如通过WCF),但拥有不同的应用程序验证逻辑也是很正常的.

如果你在视图模型中使用DataAnnotations,你可以免费获得客户端javascript验证,所以作为一般规则,我总是从我的Domain对象中有一个单独的ViewModel,即使它是1:1映射 - 我只是使用AutoMapper来在他们之间翻译.除了获得客户端验证之外,它还减少了域验证中的混乱.

  • 好吧,然后我将为我的视图模型开发一些验证。Fluent Validation 与 asp.net mvc 有很好的集成(它覆盖了数据注释)。有一些验证在数据库中产生了一些命中(使用我的存储库的自定义验证)。这些验证应该在域模型或 ViewModel 上进行,还是两者都进行?如果两者都存在,我的验证将在数据库上进行两次命中以进行相同的验证?干杯! (我也会使用 AutoMapper) (2认同)