在典型的MVC应用程序中,我们在许多不同的地方进行验证。它可能是客户端,在控制器中,然后再在数据级别。如果您有业务层,那么还有其他验证。
我们如何统一所有这些以便我们不会违反DRY,并在验证更改时引起支持噩梦?一个子问题是如何在所有层上基于模型启用动态验证。
例如:我们可能有一个具有数据注释属性的ViewModel。在MVC2 / 3中,这统一了客户端和控制器验证,但对数据模型没有帮助(除非您使用数据模型作为视图模型,这不是一个好习惯)。
这意味着您必须将相同的验证添加到数据模型和业务层,并将其复制。而且,数据模型可能具有与视图模型略有不同的验证要求(例如,整个数据记录可能包含多步向导的多个视图模型。并且只能保存完整的记录)。
有些人在使用带有部分类的EF或L2S等ORM时会向数据模型添加复杂的验证,我也不确定它是正确的路径。它适用于主要面向数据的应用程序(数据输入类型应用程序),但不适用于具有更多非数据业务逻辑的应用程序。
我想要的是为所有图层生成验证或者挂钩到单个验证系统的方法。这样的事情存在吗?
答案 0 :(得分:1)
“Fluent Validation”提供更好的可重用性。 请拜访。 http://fluentvalidation.codeplex.com/
Fluent Validation的可重复使用文档。
下面一个可能完全满足您的需求。 http://tnvalidate.codeplex.com/
答案 1 :(得分:0)
我想我真的不明白你的答案,因为你的数据模型,商业模式和视图模型很少都是一样的。如果是,只需使用数据模型并对其进行验证。所有图层的验证都是特定于图层的。
示例:如果您更改了ui图层或创建了新图层,则您的ui不应包含业务层逻辑。