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

时间:2010-04-25 19:05:55

标签: asp.net-mvc metadata viewmodel

我正在使用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的模式?

1 个答案:

答案 0 :(得分:2)

重复验证很好。诀窍是放在合适的位置。

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

不要以DRY为借口违反SRP! :P

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


我猜Automapper无法解决这个问题。 :)

相关问题