第六十四条 努力使失败保持原子性

本文探讨了在程序中如何保持对象状态的一致性,即使在遇到异常时也能确保数据不丢失或改变。介绍了实现失败原子性的五种方法,包括使用不可变对象、参数检查、调整计算流程、事务管理和对象克隆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当对象抛出异常后,我们希望这个对象的数据能保持抛出异常之前的状态,比如对象里面有个age的属性,之前值为20,这时候对象抛出了异常,我们希望异常后,这个对象的age值仍为20,而不是直接变为0。尤其是受检的异常,我们总是期望程序能尽量完美的运行下去,从异常中恢复后,保证数据不改变,不丢失。程序对象遇到了异常,但对象的属性值不应该改变,仍保持调用前的状态和值。具有这种属性的方法被称为具有失败原子性。

有几种办法能实现:

一、设计一个不可变的对象,意思就是每进行一步操作,程序都会创建一个新的对象,赋予最新的值。如果程序失败了,就不会创建新的对象,所以就保留了上一次创建的对象,对象中的值不会改变;我们只是创建新的对象,不停的赋予新的值,成功后才会替换老的对象,所以失败原子性就是显然的。

二、老方法,在操作之前检查参数的有效性,如果不合法,优先抛出异常或者不执行接下来的逻辑代码,这个要根据具体的业务逻辑来判断。

三、调整计算处理的过程,保证任何可能会失败的计算部分都在对象状态被修改之前发生。

四、开启类似于事务管理器的做法,如果程序没完全执行成功,就对代码的数据进行恢复,恢复到执行逻辑之前的模样,这个一般是数据库操作用的比较多。

五、对象进行clone,在一份临时拷贝的对象上执行操作,操作完成后,使用临时拷贝的的结果代替对象的内容,这也就是传说中的备份操作。


我们进行代码编程,要考虑性能和安全及代码逻辑的重要性,然后做出合理的选择。前三种方法应该比较常见。我们要注意使失败保持原子性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值