选择哪个验证框架:Spring Validation还是Validation Application Block(Enterprise Library 4.0)?

7

我正在尝试为一个重要的应用程序选择其中一个验证框架,虽然两个选项看起来都很吸引人,但在做出决定之前,我想知道是否有任何特定的优缺点需要注意。


网页还是桌面应用?您正在使用其他Entlib块吗?请指定架构。 - boj
这是一个网络应用程序。我可能会使用其他的Entlib块,例如安全和日志记录,因为这些在应用程序中是必需的。但我不会使用Unity,因为这部分将由Spring.NET处理。 - mr.sverrir
1
我没有使用过Spring.NET,但我是EntLib块的忠实粉丝。你应该阅读http://weblogs.asp.net/ricardoperes/archive/2009/03/11/asp-net-validation-with-the-enterprise-library-validation-block.aspx和http://www.davidhayden.com/blog/dave/archive/2007/02/28/PropertyProx。 - boj
非常感谢!我一定会考虑使用EntLib。 - mr.sverrir
2个回答

8

在我看来,使用属性进行验证不是最好的解决办法。首先,您必须在域模型中引用基础架构。其次,您没有任何机会向编译后的类添加验证。最后,您无法使用属性验证复杂逻辑,因此必须为实体制作Validate方法,这似乎很尴尬。

我认为验证应该分离为不同的对象。例如,您可以定义验证规则的IValidator。使用像xVal这样的框架有助于在JavaScript中完成表现层的验证。

您可能希望查找xValFluentValidation for .NETNHibernate Validator 1.2 alpha也具有流畅的语法,并且与xVal集成(不确定alpha版本是否具有,但1.0应该具有)。

企业验证块也有一些负面影响。我的实体属性最终有3行属性,使可读性变差。尝试使用AND或OR运算符添加验证也相当痛苦。


1
验证应用程序块不必与属性一起使用。它包含基于配置的验证方法。阅读此文章:http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=46 - Steven
1
虽然我更喜欢基于配置的验证而不是基于属性的配置,原因与Marek所描述的相同,但VAB 5.0允许您使用DataAnnotations引入的伙伴类技术来定义验证。 - Steven
1
xVal曾经与ASP.NET MVC 1.0一起使用,目前已被弃用。 - Michael Freidgeim

3

我发现企业库块的一个问题是,它可能会强制你使用其他你不想要或不需要的块。例如,验证块可能会使用日志记录块,但你已经满意自己的日志系统了。现在你的应用程序以不同的方式记录日志。尽管如此,我喜欢企业库中验证块的外观。我还没有尝试过Spring.NET。


我从未遇到过验证应用程序块的这个问题。您能指出VAB调用日志应用程序块的代码或位置吗? - Steven
1
我仔细研究了一下,但是企业库的验证程序集没有直接调用任何日志记录程序集。我认为您的应用程序直接使用了日志记录部分。在我的应用程序中,我只发布与VAB特定的程序集。对于VAB 5.0,您需要: CommonValidationServiceLocationUnityUnity.ConfigurationUnity.Interception - Steven
这可能是在旧版本上发生的。 我想我看到这个是企业库的2.0版本。 - SteveM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接