ASP.NET MVC 2数据验证:这是否从DomainModel传递到ViewModel?

时间:2010-08-30 15:49:07

标签: asp.net-mvc-2 data-annotations validation

鉴于我对MVC和DDD的理解(必要时批评):

  • 域模型可以由工厂创建,并由存储库保留。这些是POCO对象。
  • 视图模型包含视图所需的部分或完整域模型。它们由与存储库交互的服务生成。因此,域模型永远不会直接进入视图。同样,ViewModels永远不会被保留。
  • 您很可能会为同一个域模型提供多个View模型,因为您可以在多个视图中显示它。

也就是说,向域模型添加数据验证可以消除任何类型的冗余。

那么如何让ViewModel继承域模型数据验证呢?

我不希望简单地从视图模型引用域模型。

1 个答案:

答案 0 :(得分:2)

我在模式和问题上问了同样的问题。去年10月与Brad Wilson对话进行实践峰会,他没有全球解决方案。

我与他讨论的一个想法是扩展一个对象映射库,例如AutoMapper,以便将验证从域模型映射到视图模型。

在设计框架以促进这种情况时,需要考虑以下事项:

  1. 验证规则可能取决于上下文,因此可能对特定视图模型是唯一的。企业库验证块允许使用配置文件设置验证逻辑 - 例如,可以扩展为传输到视图模型。

  2. 视图模型可能具有不属于域模型的属性,例如指定已选中某个“同意条件”复选框的属性。此属性需要验证,但它特定于视图和用例,而不是域模型。此方案充当另一个参数,以使验证逻辑至少部分保持独立。

  3. 出于维护和清晰的目的,可能更容易为域模型和视图模型复制某些验证逻辑,而不是使用映射框架。