Welcome 微信登录

首页 / 网页编程 / ASP.NET / Asp.Net MVC杂谈之:—步步打造表单验证框架(2)

Asp.Net MVC杂谈之:—步步打造表单验证框架(2)2011-03-05 博客园 Leven题外话:为了不再误解,关于造轮子的事情在本篇开头再次重点提出,如果您觉得再造轮子的人是傻瓜,那直接无视我以及我的附带品好了.本文的重点并不是做了一个验证框架,真要如此,直接给出代码不就结了,或者直接来篇如何使用DataAnnotations即可,何必长篇大论来一通,如果认真看了本文就可以知道本文是讲解了如何使用TDD的方法来实现一个验证框架,同时尽可能做到通俗易懂,当然,这并不是说本文造的轮子就没有价值了,别人的总是别人的,验证框架并不是一个很复杂的东西,一个人做出一个完善的也不是什么难事,也许在某些时候土炮就比洋炮好用也说不准,最后,希望各位手下留情.

说了一通废话,下面开始正文了,本篇的重点是解决前篇的代码灵活性问题,前一篇我们对实现了两个验证属性,但是确遇到了新的问题,方法中代码量的激增以及死板的验证方式无法让我们灵活的扩展该框架,穷则变,变则通,我们不得不想办法解决这个问题,从目前的代码看,实体的Validate方法明显有问题,它的责任明显太多,势必要对其进行重构,要把它的责任分离出去,如何分离呢?

我们完全可以这样考虑,现在的验证属性仅仅申明了验证参数,而且如果有很多属性参数也会不同,验证的模式也各不相同,那为什么不让验证属性自食其力,自力更生呢?自己的限制,自己验证多好.因此考虑扩展验证属性的功能,既然验证是一种契约,一种公共行为,我们免不了设计一个接口来负责这部分的内容,考虑下面的接口:

这样一来我们就可以在xxxAttribute中实现相应的验证逻辑了,首先确定新的验证代码,对3个属性进行全面验证测试:

然后我们开始重构RangeAttribute和RequiredAttribute类,下面的图片分别展示了两个属性中的验证逻辑