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

No-fail保证

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

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

Strong保证

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

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

Basic保证

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

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

转载于:https://www.cnblogs.com/clark159/archive/2012/06/30/2570734.html

[Chatter] 错误处理的安全保证等级相关推荐

  1. 下列关于c语言的结构特点叙述错误的是,全国计算机等级考试二级C模拟试题(1)...

    一.选择题(每题2分,共计70分) 1.栈和队列的共同特点是 A)都是先进先出 B)都是先进后出 C)只允许在端点处插入和删除元素 D)没有共同点 2.已知二叉树后序遍历序列是dabec,中序遍历序列 ...

  2. js提交出现post错误_阿里云的 Node.js 稳定性实践

    整理人:前端自习课 前言 如果你看过 2018 Node.js 的用户报告,你会发现 Node.js 的使用有了进一步的增长,同时也出现了一些新的趋势. Node.js 的开发者更多的开始使用容器并积 ...

  3. Go 2将添加错误处理和泛型

    在Gophercon 2018大会上,Russ Cox介绍了将添加到Go 2的特性,包括错误处理和泛型,并透露了当前一些新特性提案的内容. \\ 自去年在Gophercon 2017大会上宣布以后,G ...

  4. 智能合约语言 Solidity 教程系列9 - 错误处理

    这是Solidity教程系列文章第9篇介绍Solidity 错误处理. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文 ...

  5. python错误-第16天:Python 错误和异常

    by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...

  6. python判断正确错误_第16天:Python 错误和异常

    by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...

  7. 2、MySQL错误日志(Error Log)详解

    错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信息.服务器在运行过程中发生的故障和异常情况等. 作为初学者,要学会利用错误日志来定位问 ...

  8. 7 php程序的调试方法_PHP程序错误调试方法 让php显示错误提示

    公司的服务器用的是wdcp搭建的环境,安装非常方便,但是在开发的过程可能把函数名之内的东西写错了,服务器直接返回的是500错误,没有任何错误提示,只是告诉你500错误,很让人头疼,这样调试错误很不方便 ...

  9. Python 错误和异常

    我们在执行程序语句的时候,经常会看到命令行输出报错信息,例如: >>> while True print('Hello world')File "<stdin> ...

  10. golang错误处理机制(异常处理)

    看一段代码,引入错误处理 对上面代码的总结: 在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.) 如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行.还可 以 ...

最新文章

  1. 数据库连接字在Web.config里的用法
  2. java开发人工智能客服_Java开发人工智能客服机器人
  3. switch日版有中文吗_任天堂switch国行和日版的区别
  4. window.open与window.location.href
  5. HDU1588(矩阵连乘求和)
  6. 在WebIDE里导入SAP Fiori应用
  7. Web服务器故障的奇怪原因
  8. 2017.9.19 禁忌 失败总结
  9. 今天需要修复的bug
  10. 【裂缝识别】基于matlab GUI BP神经网络路面裂缝识别系统【含Matlab源码 1063期】
  11. 【全开源商城小程序源码】ThinkPHP 5.1+带后台商城源码程序+带详细安装使用文档
  12. 5G协议演进(包括3GPP协议版本)
  13. 工科数学分析寒假预习day4 更序问题和级数乘法
  14. 第二人生的源码分析(二十)显示人物名称
  15. pubg服务器维护6.23,pubg维护6月23日 | 手游网游页游攻略大全
  16. [经验]iOS开发-记录下在开发过程中遇到的问题的解决方案及经验总结-1
  17. 线性代数(2)行列式6种运算性质
  18. PCA(非常详细)【机器学习】
  19. 小孔成像总结_初中物理知识点总结+解题技巧+方法总结全汇总
  20. Java中创建目录 或 创建文件

热门文章

  1. ps cc2019 安装教程
  2. PROC PRINT过程
  3. 工欲善其事之Redis可视化管理工具
  4. html的滚动条样式,css滚动条样式
  5. Slicer学习笔记(六十一)slicer下segmentation segment合并
  6. 恶意软件家族分类 模型集成方案总结
  7. html td 长度适配,table的td宽度自适应
  8. 初识C语言之条件结构篇——带你认知编程世界的逻辑之美!
  9. 海绵城市工程_海绵城市工程案例详解—雨水调蓄池
  10. 理论力学---约束及其分类