失败原子性(failure atomic)
失败的方法调用应该使对象保持在被调用之前的状态。
错误通常是不可恢复的,当方法抛出错误时,不需要保持原子性。
作为方法规范的一部分,方法产生的任何异常都应该让对象保持在该方法调用之前的状态。如果违反这条规则,API文档就应该清楚地指明对象将会处于什么样的状态。
失败原子性实现方法
- 对象为不可变对象
- 在执行操作之前检查参数的有效性。在对象状态被修改之前,先抛出异常
- 调整计算处理的过程,使得任何可能会失败的计算部分都在对象状态被修改之前发生
- 编写恢复代码,由其拦截操作过程中发生的失败,以及使对象回滚到操作开始之前的状态上
- 在对象的一份临时拷贝上执行操作,操作完成后,在使用临时拷贝的的结果代替对象的内容