我们有一个系统可以处理多个用户,用户可以花费最多10分钟来处理项目。一个重要的业务规则是每个项目只能由一个用户处理。我们通过拥有版本属性来确保这一点(我们使用NHibernate)。如果某个人处理某个项目并且他们的版本号与数据库中的版本号不匹配,那么其他人已经处理过它并拒绝他们的工作。显然,这对我们的用户来说会非常令人沮丧,因为他们不知道其他人是否正在处理与他们相同的项目。此外,具有合并数据的能力不是一种选择,因为这是一个人的过程。
我能想到的最不突兀的想法是跟踪哪些用户打开每个项目。假设我打开了项目123
,其他人打开它然后他们可以看到谁打开了它。我对这种方法遇到的一个问题是,如果应用程序崩溃或者用户只是意外地关闭了他们的计算机,会发生什么?由于用户不会经历用于离开项目的常规步骤(例如,后退按钮),因此我们为用户123abc
提供了当他们可能在家时查看项目的条目。
我们还研究了用户能够锁定他们计划工作的项目的想法,但是经过多次讨论,我们担心人们会开始锁定项目并被其他任务分心,午餐或者当天回家。如果有人锁定了物品并且必须尽快完成(例如紧急物品),这可能会特别成问题。
有什么替代方法可以实现这样的东西?
答案 0 :(得分:1)
我会提供2个功能来管理孤儿锁
一旦锁定被释放,用户就无法提交他们提交的更改而无需再次签出该对象。