[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,必须要重新设计。因为方法执行发生异常之后,如果数据或状态无法保证在可接受范围里,那只会引发蝴蝶效应产生更多的错误。
转载于:https://www.cnblogs.com/clark159/archive/2012/06/30/2570734.html
[Chatter] 错误处理的安全保证等级相关推荐
- 下列关于c语言的结构特点叙述错误的是,全国计算机等级考试二级C模拟试题(1)...
一.选择题(每题2分,共计70分) 1.栈和队列的共同特点是 A)都是先进先出 B)都是先进后出 C)只允许在端点处插入和删除元素 D)没有共同点 2.已知二叉树后序遍历序列是dabec,中序遍历序列 ...
- js提交出现post错误_阿里云的 Node.js 稳定性实践
整理人:前端自习课 前言 如果你看过 2018 Node.js 的用户报告,你会发现 Node.js 的使用有了进一步的增长,同时也出现了一些新的趋势. Node.js 的开发者更多的开始使用容器并积 ...
- Go 2将添加错误处理和泛型
在Gophercon 2018大会上,Russ Cox介绍了将添加到Go 2的特性,包括错误处理和泛型,并透露了当前一些新特性提案的内容. \\ 自去年在Gophercon 2017大会上宣布以后,G ...
- 智能合约语言 Solidity 教程系列9 - 错误处理
这是Solidity教程系列文章第9篇介绍Solidity 错误处理. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文 ...
- python错误-第16天:Python 错误和异常
by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...
- python判断正确错误_第16天:Python 错误和异常
by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...
- 2、MySQL错误日志(Error Log)详解
错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信息.服务器在运行过程中发生的故障和异常情况等. 作为初学者,要学会利用错误日志来定位问 ...
- 7 php程序的调试方法_PHP程序错误调试方法 让php显示错误提示
公司的服务器用的是wdcp搭建的环境,安装非常方便,但是在开发的过程可能把函数名之内的东西写错了,服务器直接返回的是500错误,没有任何错误提示,只是告诉你500错误,很让人头疼,这样调试错误很不方便 ...
- Python 错误和异常
我们在执行程序语句的时候,经常会看到命令行输出报错信息,例如: >>> while True print('Hello world')File "<stdin> ...
- golang错误处理机制(异常处理)
看一段代码,引入错误处理 对上面代码的总结: 在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.) 如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行.还可 以 ...
最新文章
- 数据库连接字在Web.config里的用法
- java开发人工智能客服_Java开发人工智能客服机器人
- switch日版有中文吗_任天堂switch国行和日版的区别
- window.open与window.location.href
- HDU1588(矩阵连乘求和)
- 在WebIDE里导入SAP Fiori应用
- Web服务器故障的奇怪原因
- 2017.9.19 禁忌 失败总结
- 今天需要修复的bug
- 【裂缝识别】基于matlab GUI BP神经网络路面裂缝识别系统【含Matlab源码 1063期】
- 【全开源商城小程序源码】ThinkPHP 5.1+带后台商城源码程序+带详细安装使用文档
- 5G协议演进(包括3GPP协议版本)
- 工科数学分析寒假预习day4 更序问题和级数乘法
- 第二人生的源码分析(二十)显示人物名称
- pubg服务器维护6.23,pubg维护6月23日 | 手游网游页游攻略大全
- [经验]iOS开发-记录下在开发过程中遇到的问题的解决方案及经验总结-1
- 线性代数(2)行列式6种运算性质
- PCA(非常详细)【机器学习】
- 小孔成像总结_初中物理知识点总结+解题技巧+方法总结全汇总
- Java中创建目录 或 创建文件