我一直在开发PHP应用程序。 (基本)想法如下;用户可以使用块构建Web页面。这些块可以包含图像,文本等。这些块中的每一个都有自己的选项。这些块在域驱动设计中通过PHP定义。
我构建应用程序以使用基于php的Controller来处理来自jQuery / Javascript前端的请求。每次用户编辑一个选项时,它都会发送给这个控制器,该控制器从Redis和/或php-session取消序列化一组块(php-objects),并设置编辑或添加/删除其中一个块的块的属性。块。这是为了强制执行域逻辑。
这对我自己来说很好。我从来没有把竞争条件记在心里。在推进产品的同时,我注意到人们会丢失数据。我会解释会发生什么;
有一种情况可能会创建2个并发请求,这将覆盖两个请求中的1个的编辑。
我知道我需要重写应用程序的这一部分。问题是什么是最好的方法。我可以;
我很好奇我可能缺少的其他方法,或者我上面提到的两个方法中的一个是否足够。
答案 0 :(得分:1)
据我了解您的问题,您可能希望实施的是optimistic locking。
实现它的一种简单方法是对聚合进行版本化。
每当有人编辑您的对象时,请增加其版本。
当您POST
编辑过块时,您会发回您尝试应用更改的版本。
然后,当从持久性存储中恢复对象时,您需要比较版本并确保实际处理最新的对象。
如果是,保存,如果不是,则拒绝修改,通知用户,然后重新加载对象,并采取适当的操作(这取决于您的需要)。