拼吾爱程序人生

首页 » .Net编程 » C# » 从原始到优雅:C# 验证的四个阶段
cobra - 2008-9-2 21:37:00
背景

我们都知道ENTLIB有VAB,也知道如果不在乎大量的XML损视力的话,VAB非常非常优雅,但是在不大的项目中,很多情况下我们依旧自己写着验证的代码

所以在这篇文章中,打算展示一下学习.NET一年半以来,写验证代码的各个阶段,并展示一种个人觉得比较优雅的验证代码的写法,如果大家有别的方案,也请提出来与大家分享哦



第一阶段--强写

所谓强写,自然就是强行地写了,从知道需要参数验证(很惭愧,学了.NET整整1个月才知道这事)开始,好长一段时间都在强写着验证的代码,也不记得什么时候开始觉得这么写不舒服,什么时候开始换成了别的方法,总之早期的代码中充斥着这样的片断

Code


最终的结果是,一个.cs文件中有整整1/2的内容是这些可爱的if, throw和花括号

这个方案不用评价了,我自己会把他贬得很惨,再怎么说曾经也是为了这些东西写到手抽筋啊,痛苦啊





第二阶段--Guard类


嗯,MS很多项目中都有这个Guard类,把一些主要的验证的方法写在了类中,方法直接抛出异常,大致是这样的

Code


调用的方法大致是这样的

Code


看起来清爽多了,再也没有if, throw和美丽的花括号了,可喜可贺~可喜可贺~

但是!并不是一切都这么美好的!每一次调用方法都需要值一个字符串以表示参数的名称,这里写了4个”s”,当然你会说4个”s”没什么,但是写4个”user.Name”再写6个”user.CreationDate”呢……

什么感觉?手酸?NO~NO~这不是最重要的,重要的是写字符串的时候VS没有自动提示啊!你敢保证写10个不错一个字母么?

其实对这个阶段还是非常有感情的,怎么说都是对“把类似功能合在一起”的理念的尝试呢



第三阶段--扩展方法

然后,然后就有了C# 3.0,就有了扩展方法,然后Guard中的方法的第一个参数都加了一个this,调用就成了这样

Code


基本我不认可这是一个阶段呢,只是用了点语法糖而已,最重要的字符串多次输入参数名称的问题根本没有得到解决,少打几个字会很快乐么……作为一个标准的程序员,我想说:NO!





第四阶段--不知道怎么说


就是现在在用的方法啦,刚刚“发明”出来的哦,个人自我感觉良好,但实在不知道怎么从设计上去解释,就先写一下实现方案吧

很久很久以前,有一个孤独的类,句叫ValidationHelper<T>,他的任务就是惩治世上所有不听话的参数,根据见过他的变量们的描述,他是长得这样的





Code







因为ValidationHelper<T>可以保存住参数的值和参数的名称,因此就一下子地解决了多次输入参数名称的问题,真不亏是大侠啊

但是,很多人都不知道,为什么功能这么少的ValidationHelper<T>可以消灭几乎所有的不规范参数,其实秘诀还在于扩展方法,通过扩展方法的联系,ValidationHelper<T>找到了很多伙伴,其实除暴安良的,是一个团队,而非一个人,下面来看看StringValidationHelper是怎么样对付不规范的string的吧




Code




好了,伙伴找到了,现在的问题是,当需要大侠帮助的时候,我们不得不使出全身的力气使用new来召唤大侠……这显然很不爽,因此又有了一扩展方法,我们称之为“工厂”

Code


最后,我们是这样来打败黑暗势力的

Code


(文/GrayZhang  出处/博客园)

 您可能对 [C#] 的这些文章也感兴趣:

C#读取和写入word2003的书签内容
XP 风格的可拖动列、排序的DataGrid的例子
C#中调用WindowsAPI的要点
.NETFramework发现漏洞可能导致信息丢失
MySQL 5 C# sample code using ObjectDataSources
C#InnerClassvs.java的innerclass比较
用于统计函数执行时间的类
C#进阶(七)
C#版MVC框架PureMVC的深入分析和改良方案
什么是映射(reflection)?
shenjk - 2008-9-4 16:59:00
学习一下,非常好的文章
1
查看完整版本: 从原始到优雅:C# 验证的四个阶段
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: