代码大全学习总结——防御式编程

来源:互联网 发布:淘宝logo设计生成器 编辑:程序博客网 时间:2024/04/28 05:07

先回忆一下以前使用过哪些防御式编程:IF语句、Assert断言、Except异常...除了这些还能有什么呢?带着这个疑问,学习了代码大全第8章防御式编程,并将学习的成果以及自己的心得体会总结如下。

 

主要的防御式编程手段有断言、错误处理技术、异常、隔栏。

一、断言

关键点:它是用来处理“绝不应该”发生的状况。

例如:平常在代码里接收用户输入参数时,常常会写如果输入的不是数字,就返回让用户重新输入。

这个就不是绝不应该发生的状况,而是预期会发生的状况,所以在它应该用的是错误处理代码,而不是断言。

 

二、错误处理技术

当程序报错时,是直接弹出错误提示给用户,还是默默地将警告信息记录到日志文件中?

前者编写方便,尤其当多人分别开发不同的模块时,很直接地写法就是弹出错误提示窗口;

后者需要编写更多的代码,但是对用户来说更加友好;

我偏向于后者,它可以帮助技术人员在维护的后期仍能很好地定位错误原因,对于远程协助用户处理问题就更为有效。

 

另外,为使程序结构更加清晰,可以将错误的处理交给其它或专门的处理程序,而本身只是报告发生的错误,记住“返回错误码”的方式。

 

三、异常

对于我来说,异常不仅在开发中起到很好的防御式作用,它更是一个非常好的调试工具,通过不断地缩小捕获异常代码的范围,可以让逐渐让我们接近错误的准确位置。

不过,也不能滥用异常,它弱化了类的“封装”性,可能增加复杂度,所以应该合理的利用它。

1. 只在真正例外的情况下才抛出异常;

2. 可以在局部处理,就应该在局部处理它,不能推卸责任;

3. 在异常消息中提供异常发生的全部信息;

 

四、隔栏

我们数据工具里导入外包前会选进行数据校验,再执行导入;在排版软件里批量导入专家编制的数据前,需要先进行数据格式校验,再执行导入...

其实我们已经经常这么做了,老大也常常教导我们要这么做,终于在代码大全里找到一个“官方定义”了——隔栏。

假定外部的数据都是不可信的,增加一层“隔栏”,由它负责清理数据,这样以隔栏以内,就可以假定数据是可信的了。

隔栏是一个很好的思想,千万不要自以为是,不要因为在程序中加了很多的解析,很多的容错而自豪,这就是一个坑,外部环境总是不断地变化的,慢慢地你就会发现这个坑怎么也填不满了。增加一层隔栏,是一个好主意。

 

这一章还提到了其他一些防御式编程方法,这里就不做过多的阐述了。

 

正常的使用防御式编程,可以帮助在开发阶段排查出尽可能多的的错误,大大提高软件的健壮性。要想成为优秀的程序员,“谨慎”也是一项素质。

原创粉丝点击