代码大全学习总结——防御式编程
来源:互联网 发布:淘宝logo设计生成器 编辑:程序博客网 时间:2024/04/28 05:07
先回忆一下以前使用过哪些防御式编程:IF语句、Assert断言、Except异常...除了这些还能有什么呢?带着这个疑问,学习了代码大全第8章防御式编程,并将学习的成果以及自己的心得体会总结如下。
主要的防御式编程手段有断言、错误处理技术、异常、隔栏。
一、断言
关键点:它是用来处理“绝不应该”发生的状况。
例如:平常在代码里接收用户输入参数时,常常会写如果输入的不是数字,就返回让用户重新输入。
这个就不是绝不应该发生的状况,而是预期会发生的状况,所以在它应该用的是错误处理代码,而不是断言。
二、错误处理技术
当程序报错时,是直接弹出错误提示给用户,还是默默地将警告信息记录到日志文件中?
前者编写方便,尤其当多人分别开发不同的模块时,很直接地写法就是弹出错误提示窗口;
后者需要编写更多的代码,但是对用户来说更加友好;
我偏向于后者,它可以帮助技术人员在维护的后期仍能很好地定位错误原因,对于远程协助用户处理问题就更为有效。
另外,为使程序结构更加清晰,可以将错误的处理交给其它或专门的处理程序,而本身只是报告发生的错误,记住“返回错误码”的方式。
三、异常
对于我来说,异常不仅在开发中起到很好的防御式作用,它更是一个非常好的调试工具,通过不断地缩小捕获异常代码的范围,可以让逐渐让我们接近错误的准确位置。
不过,也不能滥用异常,它弱化了类的“封装”性,可能增加复杂度,所以应该合理的利用它。
1. 只在真正例外的情况下才抛出异常;
2. 可以在局部处理,就应该在局部处理它,不能推卸责任;
3. 在异常消息中提供异常发生的全部信息;
四、隔栏
我们数据工具里导入外包前会选进行数据校验,再执行导入;在排版软件里批量导入专家编制的数据前,需要先进行数据格式校验,再执行导入...
其实我们已经经常这么做了,老大也常常教导我们要这么做,终于在代码大全里找到一个“官方定义”了——隔栏。
假定外部的数据都是不可信的,增加一层“隔栏”,由它负责清理数据,这样以隔栏以内,就可以假定数据是可信的了。
隔栏是一个很好的思想,千万不要自以为是,不要因为在程序中加了很多的解析,很多的容错而自豪,这就是一个坑,外部环境总是不断地变化的,慢慢地你就会发现这个坑怎么也填不满了。增加一层隔栏,是一个好主意。
这一章还提到了其他一些防御式编程方法,这里就不做过多的阐述了。
正常的使用防御式编程,可以帮助在开发阶段排查出尽可能多的的错误,大大提高软件的健壮性。要想成为优秀的程序员,“谨慎”也是一项素质。
- 代码大全学习总结——防御式编程
- 读《代码大全》--防御式编程--总结
- 《代码大全》学习笔记 第八章,防御式编程
- 代码大全学习-11-防御式编程(Defensive Programming)
- 《代码大全》学习摘要(三)防御式编程
- 《代码大全》笔记--防御式编程
- 代码大全学习总结——伪代码编程
- 代码大全2笔记-第8章-防御式编程
- 读《代码大全2》笔记:防御式编程
- 【代码大全】第8章 防御式编程
- 代码规范 : 防御式编程
- 代码大全学习总结——变量
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 八、防御式编程
- 读《代码大全》第2版 第 8 章,防御式编程
- 代码大全学习总结——重构
- 代码大全学习总结——表驱动法
- 代码大全学习总结——一般控制问题
- 软件架构————防御式编程
- KEILC51编译问题ERROR L104: MULTIPLE PUBLIC DEFINITIONS重复定义
- scons 学习
- delphi的treeview中增加checkbox复选框
- 一个计算机爱好者的不完整回忆(十七)硬件
- android中LayoutInflater的使用
- 代码大全学习总结——防御式编程
- XAF之在代码中选中导航栏子项
- 查阅linux kernel api
- Website online之前的Checklist
- Python实现快排
- Linux C 经典题目
- 如何运用服务器虚拟化优化数据中心
- Kamailio (OpenSER) install and configure
- div里面的字体设置为透明的