用户A登录票务管理系统以编辑"SomePage.aspx"上的内容。
30秒后,用户B登录以编辑"SomePage.aspx"上的相同票务。
在三层架构中,通知每个用户有其他人正在修改相同内容的最佳实践是什么?
用户A登录票务管理系统以编辑"SomePage.aspx"上的内容。
30秒后,用户B登录以编辑"SomePage.aspx"上的相同票务。
在三层架构中,通知每个用户有其他人正在修改相同内容的最佳实践是什么?
例如,Roundup使用乐观并发方法:当您提交更改时,您可能会看到一个警告,提示有人在您之前进行了更改,并附带一个链接到显示他们更改的页面。您可以单击“提交”以继续进行更改,或编辑表单中的值,然后再提交。
对于票务系统来说,这种方法效果还不错,因为票务系统上很少有共享状态--主要是您附加到消息日志(或者相似的地方),所以两个消息会一个接一个地添加。
我在这方面经验不是很丰富,但如果我需要做类似的事情,我会在工单表上创建一个名为EditingBy的新字段,并添加默认值“0”。
当用户调用TicketID = 897时,查询应该像这样:
SELECT * FROM Tickets WHERE TicketID = 897;
UPDATE Tickets SET EditingBy = @UserID WHERE TicketID = 897;
在代码中,您可以查看EditingBy是否大于0,如果是,则可以警告UserB,UserA(您知道UserID)正在编辑票证,就像SO在某人发布答案并且您正在编写自己的答案或者当您获得新徽章时所做的那样。
提交更新票证时,您可以将该字段更新回0。
请注意,用户可能会进入SomePage.aspx并离开而不执行任何操作,因此在body标记中使用javascript onUnload触发异步调用以将EdittingBy更新回0是一个好主意。
希望这给您提供了一些想法。
编辑: 如果无法编辑数据库,则始终可以在XML文件中记录EditingBy,只需保留TicketID和UserID,并检查TicketID是否在XML中,而不是查找它是否大于0。