2012-01-11 45 views
0

我們有一個處理多個用戶的系統,用戶可以花費10分鐘的時間處理一件物品。一個重要的商業規則是每個項目只能由一個用戶處理。我們通過一個版本屬性(我們使用NHibernate)來確保這一點。如果有人處理某個項目,並且他們的版本號與數據庫中的版本號不匹配,則其他人處理該項目,我們會拒絕他們的工作。很明顯,對於我們的用戶來說,這可能會讓人感到沮喪,因爲他們不知道其他人是否正在處理與他們相同的項目。此外,有能力合併數據不是一種選擇,因爲這是一個人的過程。在跟蹤哪些用戶打開物品時處理超時?

我能想到的最不顯眼的想法是跟蹤哪些用戶打開每個項目。假設我打開了項目123,其他人打開它,然後他們可以看到誰打開了它。我用這種方法遇到的一個問題是,如果應用程序崩潰或用戶意外關閉了他們的計算機會發生什麼?由於用戶不會經歷通常的離開項目的步驟(例如後退按鈕),因此當他們可能在家時,我們將有用於查看項目的用戶的輸入項123abc

我們也研究過用戶能夠鎖定他們計劃處理的項目的想法,然而,經過很多討論,我們擔心人們會開始鎖定項目,或者被其他任務分心,午餐或也許回家過一天。如果某人鎖定了物品並且必須儘快完成(例如緊急物品),則這可能尤其成問題。

有什麼替代方案來實現這樣的事情?

回答

1

我將提供2個功能來管理孤立鎖

  1. 一段時間(比如30分鐘)之後自動解除鎖定。
  2. 提供監督器重寫以釋放鎖。這樣你不必等待30分鐘。

一旦鎖定被釋放,用戶無法提交他們提交的更改,而無需再次檢出對象。

+0

這些都是很棒的點子。謝謝。 – Nosila 2012-01-12 12:23:59