[Chatter] 错误处理的安全保证等级

在撰写程序的时候,错误处理是一件很重要的事情。在「C++编程规范」这本书的第71个条款里,依照不同的错误处理结果,定义出三种「安全保证」等级: No-fail保证、Strong保证、Basic保证。这三种安全保证等级以执行方法遇到错误并且处理之后,是否会影响到数据或状态来做等级区分。开发人员在撰写每个方法之前,先决定方法的错误处理是属于哪个等级,可以减少思考的范围、避免一些不必要的过度设计。

 

No-fail保证

所谓的「No-fail保证」是说:执行方法一定成功、不会发生异常。在系统里有些方法,必须设计为提供No-fail保证等级,例如:解构子、资源释放、Log纪录…等等。这些方法通常会在错误处理时使用,如果错误处理时又会出错,那应该就是开发人员的灾难了。

 

以开发人员的角度来说,会希望所有方法都是No-fail保证等级。不过很残酷的现实是,大多数的方法都会发生异常、需要错误处理。

 

Strong保证

所谓的「Strong保证」是说:执行方法不一定成功、但异常处理之后状态或数据不变。系统里最常见设计为提供Strong保证等级的方法,就是使用「交易功能」的数据库操作方法。当执行数据库操作方法发生异常的时候,系统会Rollback数据库,让数据库维持呼叫方法之前的状态。

 

以开发人员的角度来说,应该要尽量设计方法到达Strong保证等级。方法执行的结果,要不就是正常执行完毕、要不就是发生异常可是数据或状态不变。

 

Basic保证

所谓的「Basic保证」是说:执行方法不一定成功、但异常处理之后的状态或数据是在「可接受范围」里。这边的可接受范围是指数据或状态的正确性,例如说:一台轿车最多只能坐五个人,结果执行方法发生异常后,在数据库里留下了六个人的纪录,这就是数据不在可接受范围里。

 

以开发人员的角度来说,Basic保证等级是方法必须满足的最低等级。当方法执行发生异常,可是异常处理之后的状态或数据不在可接受范围里,这样的执行结果应该归类为程序的Bug,必须要重新设计。因为方法执行发生异常之后,如果数据或状态无法保证在可接受范围里,那只会引发蝴蝶效应产生更多的错误。


posted @   Clark159  阅读(1127)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示