防御式编程

检查外部或上游程序传递过来的数据 避免程序被非法数据破坏

对于非法数据 要决定如何进行处理:

断言

assert a != 0 : "a cant be zero";

使用断言来处理绝对不会处理的情况,避免把需要执行的代码如方法调用放到断言里,避免断言被关闭时产生副作用。

更多地断言是在开发环境使用,在生产环境一般都会被关掉。

错误处理

当发生错误,如何处理错误数据?

对于前四种方式,只有在替换数据对程序本身无害的情况下才能使用,使用这种方式时最好能输出相关信息,保证操作能被事后知悉,最后两种则是当替换数据会影响程序正确性的情况下才能使用,程序的健壮性与正确性二者只能取其一。

异常

程序隔离

屏幕截图 2021-09-22 164859

辅助调试代码

通过在代码里添加一些只在开发环境会执行的代码来提早暴露问题

防御防御式编程

过多的防御式代码不仅会增加软件的复杂度 同时也会影响性能

  1. 保留检查重要错误的代码
  2. 尽量保证在生产环境出现错误可以自恢复