2010-04-25 120 views
2

我写使用NHibernate和库模式的ASP.NET MVC 2应用程序。我有一个包含我的模型(业务实体)的程序集,而且在我的Web项目中,我想使用扁平化对象(可能具有其他属性/逻辑)作为ViewModels。 这些VM包含UI特定的元数据(例如,由Html.LabelFor()方法使用的DisplayAttribute)。来验证模型在ASP.NET MVC 2视图模型有道apporach

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

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

我见过Automapper项目,这有助于映射属性,但我不知道它是否能够妥善处理ASP.NET MVC 2验证的元数据。在asp.net mvc 2中使用自定义验证框架很困难吗?

你有什么模式可以帮助保持DRY的有效性吗?

回答

2

重复验证很好。诀窍是的地方它适合的地方。

在你的情况 - 在UI,UI验证逻辑(视图模型道具不能为空,以正确的格式等),在业务层 - 验证业务逻辑(帐户资金等)。

请勿使用DRY作为违反SRP的借口! :P

查看模型都应该从脱开演讲角色业务层。
不要再把所有东西都粘在一起。


我猜Automapper无法处理。 :)