我有一个客户端应用程序在数据库中的“锁定”(又名“退房”某些商业实体店的必要性锁定商业模式
的工作流程是这样的:
用户导航到一些业务对象的页面。
用户点击“编辑”。
这从anyo被编辑,锁定该项目别的。
其他工作站上的其他用户将看到正在编辑的项目有一个“锁定”图标,“编辑”按钮将是只读的。
管理员用户可以点击一个按钮来“强制”解锁项目。
很标准吧?我这个做了一堆的时间过去,我找的一些想法做这这一次的“正确”的方式...
也就是说,我想有两种方法:
我的业务对象是否实现了一些具有LockOwnerId属性的ILockable接口,并且DB中的对应表具有相同的LockOwnerId。
在DB中有一个集中的“EntityLocks”表,用于管理当前锁定/检出的所有实体类型/主键对实体。
至于获取的锁,我只是沿着检验方法的思路思考的东西API:
// Returns true if the check-out was successful,
// false if the check-out was not successful, becase the item was already locked. If
// force is set to true, will check out the toCheckOut to the current user, regardless
// of existing check-outs.
bool CheckOut(object toCheckOut, bool force)
的思考?
谢谢。
我明白你正在谈论一个WebApplication。那么这将是非常困难的。只是因为用户可以点击编辑并导航离开您的页面,并且您将永远不会知道它是否仍在编辑,直到会话过期。至少在会议期间锁定实体。 – Jeroen 2010-08-16 04:08:10
更好的是,我正在讨论一个具有Web前端和Silverlight客户端前端(通过WCF与服务器通信)的应用程序。 – Jeff 2010-08-16 04:14:08
此模式称为悲观离线锁定:http://martinfowler.com/eaaCatalog/pessimisticOfflineLock.html。 – Steven 2010-08-16 06:16:08