我在使用工作流程管理工具的团队中工作。我遇到了一个挑战,用户应该能够在流程中的任何时候回滚过去的某个点。当然收费可以处理它,但是必须手动回滚在这些活动期间可能进行的额外数据库调用。
挑战在于存在多个并行路径以及外部数据库调用的不同排列。那么是否有框架工作或跟踪这些数据库调用并回滚它们的方法?
谢谢你, 贾斯汀答案 0 :(得分:2)
例如,在实体框架中,您有TRANSACTIONS
和ROLLBACK
函数,但此ROLLBACK
仅在此TRANSACTION
开始时从此开始更改(START TRANSACTION
- SQL语句)
然后,您必须在多个并行路径中启动TRANSACTION
并决定COMMIT
或ROLLBACK
更改。但在COMMIT
之前,其他并行实例不会看到其他TRANSACTIONS
中尚未COMMITED
的人发生的更改。
我认为,您必须在应用程序/数据库上执行一些重构,但这只是offtopic提示。
答案 1 :(得分:0)
这些更改是否已提交到数据库已处于中间状态?那将是有问题的。由于其他用户可能已根据已提交的数据启动了操作。
我见过在提交之前支持n级撤消的系统(CSLA这样做),但这是在内存中的对象模型级别。
您不会无限期地打开数据库事务等待用户操作。
答案 2 :(得分:0)
您需要回滚还是需要数据处于某种状态?我问,如果后者是这种情况,那么这是一个问题或将您的记录设置回工作流程步骤X之前的值。
有一种名为Momento Pattern的设计模式,它以关键间隔拍摄对象的快照,并且除了数据库中的“当前”数据外,还会保留该数据。此类型事务可以存储为对象的序列化并进行记录,因此您需要为当前拥有的每个表创建历史记录表。
诀窍是从Memento交易中恢复您的对象,将数据保存回标准表。