我遇到了这样一种情况,我正在处理一段代码,在该代码中我命令对远程对象进行更改(即我无法复制以在克隆上工作的代码),然后要求远程对象在新状态并通过一系列相反的命令恢复我对其所做的所有更改。问题是,如果在所有这些更改中遇到错误,我希望能够回滚到目前为止所做的所有更改。
我想到的最合适的解决方案是 python try-finally 工作流程,但是当命令序列很长时,它会出现相当大的问题:
try:
# perform action
try:
# perform action
try:
# ...
finally:
# unroll
finally:
# unroll
finally:
# unroll
这样,我需要的命令越多,我的缩进和嵌套就越深,我的代码可读性就越低。我考虑过其他一些解决方案,例如维护一个堆栈,对于每个命令,我都会推送一个回滚操作,但这可能会变得相当复杂,而且我不喜欢将绑定方法推送到堆栈中。我还考虑过为我执行的每个操作增加一个计数器,然后根据计数器最终决定我想要的回滚类型,但同样,此类代码的可维护性变得很痛苦。
我在搜索“事务”和“回滚”时获得的大多数点击都与数据库相关,并且不太适合更通用的代码......任何人都知道如何系统地平息这种暴行?