如何跨层/层统一验证

时间:2011-10-02 16:42:46

标签: asp.net-mvc validation n-tier-architecture

在典型的MVC应用程序中,我们在许多不同的地方进行验证。它可能是客户端,在控制器中,然后再在数据级别。如果您有业务层,那么还有其他验证。

我们如何统一所有这些以便我们不会违反DRY,并在验证更改时引起支持噩梦?一个子问题是如何在所有层上基于模型启用动态验证。

例如:我们可能有一个具有数据注释属性的ViewModel。在MVC2 / 3中,这统一了客户端和控制器验证,但对数据模型没有帮助(除非您使用数据模型作为视图模型,这不是一个好习惯)。

这意味着您必须将相同的验证添加到数据模型和业务层,并将其复制。而且,数据模型可能具有与视图模型略有不同的验证要求(例如,整个数据记录可能包含多步向导的多个视图模型。并且只能保存完整的记录)。

有些人在使用带有部分类的EF或L2S等ORM时会向数据模型添加复杂的验证,我也不确定它是正确的路径。它适用于主要面向数据的应用程序(数据输入类型应用程序),但不适用于具有更多非数据业务逻辑的应用程序。

我想要的是为所有图层生成验证或者挂钩到单个验证系统的方法。这样的事情存在吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我想我真的不明白你的答案,因为你的数据模型,商业模式和视图模型很少都是一样的。如果是,只需使用数据模型并对其进行验证。所有图层的验证都是特定于图层的。

示例:如果您更改了ui图层或创建了新图层,则您的ui不应包含业务层逻辑。