Asp.net mvc ASP.NET MVC 2和ViewModel apporach中验证模型的正确方法

Asp.net mvc ASP.NET MVC 2和ViewModel apporach中验证模型的正确方法,asp.net-mvc,metadata,viewmodel,Asp.net Mvc,Metadata,Viewmodel,我正在使用NHibernate和存储库模式编写一个ASP.NETMVC2应用程序。我有一个包含我的模型(业务实体)的程序集,而且在我的web项目中,我希望使用展平对象(可能具有其他属性/逻辑)作为ViewModels。 这些VM包含特定于UI的元数据(例如Html.LabelFor()方法使用的DisplayAttribute) 问题是我不知道如何实现验证,这样我就不会在各个层中重复我自己(特别是验证规则在模型中编写一次并传播到ViewModel) 我在ViewModel上使用DataAnnot

我正在使用NHibernate和存储库模式编写一个ASP.NETMVC2应用程序。我有一个包含我的模型(业务实体)的程序集,而且在我的web项目中,我希望使用展平对象(可能具有其他属性/逻辑)作为ViewModels。 这些VM包含特定于UI的元数据(例如Html.LabelFor()方法使用的DisplayAttribute)

问题是我不知道如何实现验证,这样我就不会在各个层中重复我自己(特别是验证规则在模型中编写一次并传播到ViewModel)

我在ViewModel上使用DataAnnotation,但这意味着没有对模型本身施加任何验证规则。我正在考虑的一种方法是从添加新属性/覆盖旧属性的业务实体中派生ViewModel对象,从而在两者之间保留验证元数据,但这是一种难看的解决方法

我见过Automapper项目,它帮助映射属性,但我不确定它是否能够正确处理ASP.NET MVC 2验证元数据。在asp.net mvc 2中使用自定义验证框架是否困难


在验证过程中,您是否有任何有助于保持干燥的模式?

重复验证是可以的。诀窍是把它放在合适的地方

在您的情况下-在UI中,验证UI逻辑(视图模型道具不得为空,格式正确等),在业务层-验证业务逻辑(帐户有钱等)

不要以干燥作为违反SRP的借口!:P

视图模型应该将您的业务层与演示角色分离。
不要再把所有东西粘在一起了


我想汽车制造商不能处理这个问题。:)