2018-06-29 防御式编程

保护程序免遭非法输入数据的破坏

检查所有来源于外部的数据的值
检查子程序所有输入参数的值
决定如何处理错误的输入数据

断言

用错误处理代码来处理预期会发生的状况,用断言来处理绝对不应该发生的状况
避免把需要执行的代码放到断言中
用断言来注解并验证前条件和后条件
对于高健壮性的代码,应该先使用断言再处理错误

异常

用异常通知程序的其他部分,发生了不可忽略的错误
只在真正例外的情况下才抛出异常
不能用异常来推卸责任
避免在构造函数和析构函数中抛出异常,除非你在同一个地方把他们捕获
在适当的抽象层析抛出异常

隔离程序,使之包容由错误造成的伤害

隔栏与断言的关系

隔栏的使用使得断言和错误处理有了清晰的区分。隔栏外部的程序应使用错误处理技术,在那里对数据的任何嘉定都是不安全的,而隔栏内部的程序就应该应该使用断言技术,因为传进来的数据应该已经在通过隔栏时被清理过了,如果隔栏内部的某个子程序检测到了错误的数据,那么这应该是程序里的错误而不是数据里的错误。
隔栏的使用还展示了”在架构层次上规定应该如何处理错误“的价值。规定隔栏内外的代码是一个架构层次上的决策。

尽早引入辅助调试的代码

采用进攻式编程

应该以一种这样子的方式来处理异常:在开发阶段让它显现出来,而在产品代码运行时让它能够自我恢复。

计划移除调试辅助性的代码

确定在产品代码中保留多少防御式代码

对防御式编程采取防御的姿态

把握合适的度

2018-06-29 防御式编程_第1张图片
image.png
2018-06-29 防御式编程_第2张图片
image.png

你可能感兴趣的:(2018-06-29 防御式编程)