2010-06-08 95 views
0

我在使用工作流管理工具的團隊中工作。我遇到了一個挑戰,用戶應該能夠將流程中的任何時間所做的更改回滾到過去的某個時間點。當然,收費可以處理它,但在這些活動期間可能發生的額外數據庫調用必須手動回滾。回滾數據庫更改

挑戰在於存在多個並行路徑,並且存在外部數據庫調用的不同排列。那麼是否有框架工作或跟蹤這些數據庫調用並將它們回滾的方法?

謝謝你, 賈斯汀

+0

如果你有一個流A改變了記錄,流B可能會改變同一個記錄,並且誰開始流A想要回滾...我會說你的搞砸了。如果在流程處理過程中上帝禁止一個或多個其他流程(C,D,E ..)被啓動,其中一個流程後來回滾...聽起來像一團糟。您可能想與那個項目贊助商交談。 – NotMe 2010-06-08 21:46:00

+0

你是否獨立於數據談論模式更改?還是數據更改?或兩者? – Aren 2010-06-08 21:47:36

回答

2

嗯,我不這麼認爲。

實體框架比如你有TRANSACTIONSROLLBACK功能,但這種ROLLBACK只有在這個TRANSACTION從這個開始的begining變化(START TRANSACTION - SQL語句

然後,你將必須在多個並行路徑開始TRANSACTION並作出COMMITROLLBACK的更改決定。但在COMMIT之前,其他並行實例不會看到其他TRANSACTIONS中的變更,他們不會變爲COMMITED

我認爲,你必須做一些重構(refactorization)應用/數據庫,但是這僅僅是offtopic提示。

+0

@Aren B。我只是在談論數據變化。 – justin 2010-06-08 22:00:46

0

這些更改是否已提交給數據庫已處於中間狀態?這將是有問題的。由於其他用戶可能已根據已提交的數據啓動操作。

我已經看到在提交之前支持n級撤銷的系統(CSLA執行此操作),但這是在內存中的對象模型級別。

您不會無限期地等待用戶操作持續打開數據庫事務。

0

你需要回滾還是你需要數據處於某種狀態?我問,如果後者是這種情況,那麼它是一個問題或將您的記錄設置回工作流程步驟X之前的值。

有一種設計模式,稱爲Momento Pattern,它爲您的對象創建快照按照一定的時間間隔,除了數據庫中的「當前」數據之外,還會保存這些數據。這種類型的事務可以存儲爲對象的序列化並進行記錄,因此您需要爲當前擁有的每個表創建一個歷史記錄表。

訣竅是從Memento事務中恢復對象,將數據保存回標準表。