封装的一个asp.net验证码类
2010-12-28 00:00
447 查看
第一个反映是验证码的这些属性是否可以设置(也就是说是封装成一个类,然后以暴露公有属性和方法的方式来使用的,还是在直接在一般处理程序中实现了验证码的生成到输出),结果比较可惜,是后者...... 里面的算法感觉挺不错,至少对于我这种对算法几乎是不懂的人来说是这样,于是想到去封装一下她然后无耻地纳入自己的类库中去^^
old原文件如下:点击下载
首先分析一下这份代码中的不足(自己觉得的):
1、面向过程式的编程,如果要修改验证码的属性,例如修改字体的大小、背景颜色等细节的东西,需要去一般处理程序中找到相关的代码,修改之。不过这份代码比较好,把生成验证码字符串和生成图片用不同的方法分开,很容易找到要修改的地方。
2、如果我想把这个功能应用到其他地方,例如winform程序中,那么这份代码没办以一个组件(一个dll)形式被复用,而是被复制粘贴然后修改...
3、没有发现验证码生成之后有存起来(- -!)
当然,所谓的不足是相对而言的,就是有时间来思考然后慢慢设计一个验证码类的话肯定能作出一个比较不错的类出来的,但如果是在做项目并且项目很紧急的话,这样的代码其实是比较给力的,那些所谓的面向对象设计模式代码解耦啥的都是浮云~~~
接下来是我对这份代码的修改,首先确定自己要什么样的效果,就是说封装起来后我希望怎样来使用他。首先我希望在使用的时候只需要new一个验证码实例(需要的话可以对验证码的各个属性可以任意设置),然后可以调用这个实例的某些方法分别以字符串、流、位图对象、byte数组的形式获取到这个验证码(说明,这个验证码类不包括把验证码存进上下文的功能,个人觉得生成验证码和把验证码存到上下文是两种不同的功能,没必要把这功能做到验证码类中去)。这样的话在一般处理程序中代码就变得异常简单了,首先只要new出一个验证码,然后调用方法以字符串的形式获取到这个验证码,然后存到上下午中,至于存在Session中或者Cookie中就按照需要来了,验证码类不管这些的;然后是调用另外一个方法以byte数组的形式获取到这个验证码,这样通过context.Response.BinaryWrite()方法就可以输出图片了,也就是说一般处理程序中只有三句代码。调用的代码大致如下:
这里附上验证类的源码(VS2010),里面提供的属性并不全面,另外图片的输出以BMP的格式输出,比原来的那份代码输出的要清晰很多,一定程度上对功能进行封装但不一定封装得很好,供交流学习用:点击下载new
PS:记得刚出来工作的时候代码写得很差(比现在差),一般拿到一份代码都是直接用,从来没有想过是否要把代码进行修改或者封装,那时候被我的师傅教导了一次印象很深刻。个人感觉其实用别人的代码没什么不好的,一来别人用过至少证明代码的可用性,另外智商有限,有些东西自己想破头皮也没有别人想的好,但是用别人的代码一定不要盲目地拿了就用,最好根据自己的实际情况进行必要的修改或者封装,哪怕是简单的隔一层也好。当然了,还是那句话,如果项目紧急的话这样做明显是浪费时间的,总之就是不要不思考,拿了就用,至少看把关键的代码或者代码的整体结构弄清楚。
脚本之家直接都给打包了。上面是old文件夹,下面的是new文件夹的内容。下载地址 /201012/yuanma/yanzhengma.rar
old原文件如下:点击下载
首先分析一下这份代码中的不足(自己觉得的):
1、面向过程式的编程,如果要修改验证码的属性,例如修改字体的大小、背景颜色等细节的东西,需要去一般处理程序中找到相关的代码,修改之。不过这份代码比较好,把生成验证码字符串和生成图片用不同的方法分开,很容易找到要修改的地方。
2、如果我想把这个功能应用到其他地方,例如winform程序中,那么这份代码没办以一个组件(一个dll)形式被复用,而是被复制粘贴然后修改...
3、没有发现验证码生成之后有存起来(- -!)
当然,所谓的不足是相对而言的,就是有时间来思考然后慢慢设计一个验证码类的话肯定能作出一个比较不错的类出来的,但如果是在做项目并且项目很紧急的话,这样的代码其实是比较给力的,那些所谓的面向对象设计模式代码解耦啥的都是浮云~~~
接下来是我对这份代码的修改,首先确定自己要什么样的效果,就是说封装起来后我希望怎样来使用他。首先我希望在使用的时候只需要new一个验证码实例(需要的话可以对验证码的各个属性可以任意设置),然后可以调用这个实例的某些方法分别以字符串、流、位图对象、byte数组的形式获取到这个验证码(说明,这个验证码类不包括把验证码存进上下文的功能,个人觉得生成验证码和把验证码存到上下文是两种不同的功能,没必要把这功能做到验证码类中去)。这样的话在一般处理程序中代码就变得异常简单了,首先只要new出一个验证码,然后调用方法以字符串的形式获取到这个验证码,然后存到上下午中,至于存在Session中或者Cookie中就按照需要来了,验证码类不管这些的;然后是调用另外一个方法以byte数组的形式获取到这个验证码,这样通过context.Response.BinaryWrite()方法就可以输出图片了,也就是说一般处理程序中只有三句代码。调用的代码大致如下:
/// <summary> /// 获取验证码(一般处理程序入口函数) /// </summary> /// <param name="context">当前上下文</param> public void ProcessRequest(HttpContext context) { // 创建验证码 ValidateCode validateCode = new ValidateCode(); // 获取验证码(字符串),写入Session context.Session["SomeValidateCode"] = validateCode.GetString(); // 输出验证码(图片) context.Response.BinaryWrite(validateCode.GetByteArray()); }
这里附上验证类的源码(VS2010),里面提供的属性并不全面,另外图片的输出以BMP的格式输出,比原来的那份代码输出的要清晰很多,一定程度上对功能进行封装但不一定封装得很好,供交流学习用:点击下载new
PS:记得刚出来工作的时候代码写得很差(比现在差),一般拿到一份代码都是直接用,从来没有想过是否要把代码进行修改或者封装,那时候被我的师傅教导了一次印象很深刻。个人感觉其实用别人的代码没什么不好的,一来别人用过至少证明代码的可用性,另外智商有限,有些东西自己想破头皮也没有别人想的好,但是用别人的代码一定不要盲目地拿了就用,最好根据自己的实际情况进行必要的修改或者封装,哪怕是简单的隔一层也好。当然了,还是那句话,如果项目紧急的话这样做明显是浪费时间的,总之就是不要不思考,拿了就用,至少看把关键的代码或者代码的整体结构弄清楚。
脚本之家直接都给打包了。上面是old文件夹,下面的是new文件夹的内容。下载地址 /201012/yuanma/yanzhengma.rar
相关文章推荐
- 封装的一个asp.net验证码类
- [推荐]一个封装了Ext JavaScript Framework的ASP.NET服务器控件:Coolite Studio (ASP.NET)
- Asp.Net : 一个不错的随机生成验证码类
- 封装一个MongoDB的 asp.net 链接类
- 一个ASP.NET的MYSQL的数据库操作类自己封装的
- asp.net 一个封装比较完整的FTP类
- 一个ASP.Net(C#)访问Cookie的封装
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 封装一个MongoDB的 asp.net 链接类
- asp.net 自己封装数据库操作一个类中一个自定义方法Execute(),非常实用,省去了麻烦的中间过程,动态参数
- 一个ASP.NET的MYSQL的数据库操作类自己封装的
- 朋友封装的一个ASP.NET上传文件的方法
- jQuery+asp.net 封装的一个自定义控件,自主分页,查
- 自己封装的一个ASP.NET上传文件的方法
- 一个封装好的Asp.Net C# HttpRequest请求类
- 效果很好的asp.net的数据库访问模型(优化,封装一体化)
- 一个ASP.NET中使用的MessageBox类
- 为ASP.NET封装的SQL数据库访问类
- ASP.NET 2.0数据教程之一: 创建一个数据访问层