对错误的态度

    近一年来受工作的关系看其他程序员的代码的机会变多了,学习了不少东西,但同时也发现很多问题,其中我遇到的最多的就是对错误的处理态度。

数据挖掘交友

1) 从不拦截错误; 数据挖掘研究院

这可能是最原始且是最不好的行为,他们总是认为自己的程序肯定100%不会出现问题,因为他们坚信自己的代码考虑了一切可能的情况,这种理解我认为是非常危险的,翻翻你的代码,看看是否考虑了以下常见的情况:

l 在只允许输入数字的文本框里你拦截了键盘事件,但用户用右键粘贴了文本后你的程序正常吗? 数据挖掘工具

l 设置了Locked属性的文本框用户一样可以粘贴,你的程序出问题了吗? 数据挖掘论坛

l 磁盘空间不足、目录只读、没有权限、目录名中有小数点、系统采用了短日期甚至不标准的格式;

数据挖掘论坛

l 明明事先检查了磁盘空间足够,可用户偏使用了什么磁盘配额,还是磁盘空间不足;

l 用户在你一段长时间的操作工程中等的不耐烦强行关机后重新运行你的这段程序;

l 你是否相信Access数据库或SQL Server数据库设置字段不能为空,但数据库就会莫名其妙的有NULL值在里面; 数据挖掘工具

你所想象不到的情况太多了,所以说你永远不可能考虑所有的情况。

数据挖掘工具

2) 总是拦截错误;

这种情况和第一种情况恰恰相反,他会不厌其烦的在每个过程中都添加On Error Goto ,然后出错的话报一个MsgBox框出来,我相信俩年以上五年以下工作经验99%的VB程序员基本上都是这么做的,也许马上就有人立即站起来说:你刚才还说不可能考虑每一种情况,所以要拦错,为什么马上反悔了呢?这里我想提出我的第一个重要观点: 数据挖掘论坛

尽量不要封杀任何的底层错误。

数据挖掘实验室

我们假设有4个过程A,B,C,D,其中A调用了B,B有调用了C,C又调用了D,如果我们在每个子过程中都拦截了错误,那么如果D发生了错误,程序将报告发生一个错误,显然这时D退出后,C其后的代码就不应该执行了,似乎他现在唯一的办法只有通过D返回False来表示失败,他才知道底层失败了,不能继续执行了,同样的道理C和B都要返回False来取消任务。

天啦,这岂不是要没有过程都要写成返回True和False了,看看你的程序,这可能吗?而且你将遇到一个非常尴尬的局面,你调用任何一个函数都要这样调用: 数据挖掘工具

If B = False Then 数据挖掘实验室

A = False

数据挖掘工具

Exit Sub

数据挖掘交友

End If 数据挖掘交友

我想你肯定觉得不爽,不仅如此你还有一个致命的问题:最上层的程序(注意是程序而不是用户)根本不知道底层什么地方失败了,什么原因失败了,他唯一知道了事就是失败了!啊,真惨。 数据挖掘论坛

既然这样我们回头看看底层不拦截错误的情况: 数据挖掘研究院

Public Sub A()

数据挖掘工具

On Error Goto ErrorHandler 数据挖掘研究院

数据挖掘研究院

B()

"Do some thing

数据挖掘实验室

Exit Sub

数据挖掘论坛

ErrorHandler: 数据挖掘工具

MsgBox(Err.Description)

End Sub 数据挖掘实验室

数据挖掘实验室

Public Sub B() 数据挖掘工具

"Do some thing 数据挖掘交友

C()

数据挖掘实验室

End Sub 数据挖掘交友

数据挖掘论坛

Public Sub C()

数据挖掘研究院

"Do some thing

数据挖掘工具

D() 数据挖掘实验室

End Sub

数据挖掘工具

Public Sub D()

"Do some thing 数据挖掘工具

End Sub

在这里B、C、D都没有拦截错误,且不需返回是否成功,他们只专注自己所做的工作,且你可以看见的,任何地方出错都将跳出返回上一级。

所谓错误,就是一个完整事务的失败,不管他是什么情况。一个数据库连接失败是错误,一个不符合商业规则的东西也是错误,在我们的程序中同样应该作为错误触发。例如:

数据挖掘论坛

If strName = "" Then

Err.Raise(vbObjectError + 23, "Cworker.UpDate", , "名称不能为空。")

End If

数据挖掘工具

当然我同样将用户的取消作为错误出来,触发取消错误,例如: 数据挖掘工具

If UserCancel Then 数据挖掘研究院

Err.Raise(vbObjectError + 10, "frmWorker.cmdCancel_Click", , "用户取消操作") 数据挖掘研究院

End If

数据挖掘研究院

我一般习惯上把错误分为致命错误、软硬件错误、取消错误和商业错误。商业错误分为:不符合商业规则错误、权限错误。 数据挖掘工具

对于程序的错误出来分布我一般把所有函数分为:安全函数和不安全函数,比如一个窗口中有十种动作,我首先建立一个RunFunction过程,例如:

Public Sub RunFunction(ByVal vFun As EnumBusinFunction) 数据挖掘论坛

这个过程作为所有动作的入口,且统一出来错误,这个过程就叫安全函数,因为理论上调用他是不会播发错误的,然后所有事件中调用这个函数。在RunFunction函数中所调用的其他函数理论上应该都是不安全函数。

以上是我对错误的态度,说的很杂乱,请大家不要介意,我非常希望大家能够一起谈谈这个问题。 数据挖掘论坛

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:软件测试过程模型
下一篇:人月神话读书笔记(五)
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • 基于.NET开发和运行环境架构校园信息系统(
  • 基于.NET开发和运行环境架构校园信息系统(
  • 基于.NET开发和运行环境架构校园信息系统(
  • 基于.NET开发和运行环境架构校园信息系统(
  • 基于.NET开发和运行环境架构校园信息系统(
  • 软件开发中项目需求管理简述
  • 基于.NET开发和运行环境架构校园信息系统(
  • 基于.NET开发和运行环境架构校园信息系统(
  • 细谈软件需求分析过程
  • 商场荧屏导购展板系统软件需求说明书
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • 软件开发中项目需求管理简述
  • 面向服务架构(SOA)的原则
  • “再用式”软件开发方法
  • 细谈软件需求分析过程
  • 客户关系管理的三大纪律
  • 需求调研分析中的项目干系人概念
  • 获取用户需求的沟通技巧之一
  • 获取用户需求的十大沟通技巧
  • 新产品开发项目中的需求问题
  • 谈谈软件开发中的调研对象与被调研对象
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静