我目前正在设计一个将使用MVC4构建的Web应用程序。
系统的要点是有一个主视图,将显示一个记录列表。记录将在生成时添加到网格中。用户可以在"编辑"中打开记录。类型视图。
其中一个要求是,如果一个用户在"编辑"视图和另一个用户尝试打开相同的记录,第二个用户将被通知第一个用户当前正在处理该记录。
我被要求避免任何类型的锁定机制。他们只是想通知别人让它打开。
这样的事情可能吗?我一直在绞尽脑汁,但我不知所措。
答案 0 :(得分:3)
您应该使用optimistic locking实现它(实际上,没有锁定...请参阅链接以了解有关此方法的更多信息)或最后保存记录获胜
另一方面,我认为您应该像实际锁定一样实施该通知,但没有锁定。
当用户A,B,C,D,N启动某些记录版本时,您的系统应该知道这一点并存储一些临时全局状态,其中包含编辑所谓记录的用户标识符。存储此数据后,应实时通知每个人有人已开始编辑该记录(例如,您的视图可能会显示正在编辑记录的用户的用户名)。
您如何实时通知所有人?答案是SignalR,即abstraction over WebSockets and other protocols/approaches to real-time Web development。如果您想了解有关如何在实际项目中实施SignalR的更多信息,请查看此getting started with SignalR 2文章。