我正在使用NHibernate和存储库模式编写ASP.NET MVC 2应用程序。我有一个包含我的模型(业务实体)的程序集,而且在我的web项目中,我想使用平面对象(可能还有其他属性/逻辑)作为ViewModels。 这些VM包含特定于UI的元数据(例如,Html.LabelFor()方法使用的DisplayAttribute)。
问题在于我不知道如何实现验证,因此我不会在各个层中重复自己(特别是验证规则在Model中编写一次并传播到ViewModel)。
我在我的ViewModel上使用DataAnnotations,但这意味着没有对模型本身强加验证规则。我正在考虑的一种方法是从业务实体派生ViewModel对象,添加新属性/覆盖旧属性,从而保留两者之间的验证元数据,但这是一个丑陋的解决方法。
我见过Automapper项目有助于映射属性,但我不确定它是否能正确处理ASP.NET MVC 2验证元数据。在asp.net mvc 2中使用自定义验证框架难吗?
您是否有任何有助于在验证方面保留DRY的模式?
答案 0 :(得分:2)
重复验证很好。诀窍是将放在合适的位置。
在您的情况下 - 在UI,验证UI逻辑(视图模型道具不能为空,格式正确等),在业务层 - 验证业务逻辑(帐户有钱等)。
不要以DRY为借口违反SRP! :P
视图模型应该将您的业务层与演示角色分开 不要再将所有东西粘在一起了。
我猜Automapper无法解决这个问题。 :)