用户可以执行一个动作,该动作可能触发相关动作(它们本身可能具有相关动作),并且如果用户取消相关动作,我希望能够取消整个操作。
我看到的典型方式是撤消堆栈的某些变体,每个动作都需要知道如何撤消自身,然后,如果取消了子动作,则撤消的级联方式会继续。有时编写撤消方法很棘手,上下文中总是没有足够的信息来正确地知道如何以孤立的方式撤消操作。
我只是想到了(可能)更简单的方法,该方法只是pickle
程序(相关部分)的状态,然后取消操作将恢复到以前的状态,而无需为每个操作创建单独的撤消逻辑。
有人尝试过吗?有什么需要提防的陷阱吗?有什么理由不这样做吗?
编辑:依赖动作必须在父动作之后发生(甚至是否有依赖动作可能取决于父动作的结果),因此在执行任何操作之前仅检查所有依赖项是不可行的。我猜您可以说一个动作触发了其他动作,但是如果其中一个触发动作无法执行,那么任何动作都不会发生。
最佳答案
好吧,正如您所提到的,数据设计是松散耦合的,因此,我认为如果它在内存中,则不需要腌制它。只需复制所有相关变量,然后transaction.abort()
会将它们复制回去,然后transaction.commit()
只需删除数据的副本即可。
有问题,但是泡菜解决方案却没有。
关于python - 使用 pickle 进行内存中的“交易”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4986467/