【问题标题】:Design Pattern for object versioning changed by multiple sources由多个来源更改的对象版本控制的设计模式
【发布时间】:2020-08-07 07:22:22
【问题描述】:

我正在寻找一种用于从多个来源更新服务器对象的设计模式。

现状:

  • 有一个显示和修改数据的移动应用程序。
  • 有一个服务器存储带有对象版本的数据
  • 有一个新服务也更新了服务器上数据对象的一些属性

每次在服务器上更改对象时,都会增加对象版本属性。 移动应用程序必须使用新数据发送当前版本,以不更改服务器上对象的更新版本。在这种情况下会引发错误。

所以这很好,只要只有一个应用程序-服务器关系并且应用程序确保它更新它的本地对象,以防服务器上有一个更新的对象。

新要求:

有一项新服务可以与移动应用程序同时更新服务器上的对象(可能)。 因此,外部源​​将新数据发送到服务器,服务器会更新对象并增加版本。

然后可能会发生,移动应用程序也发送新的对象数据,现在的问题是,什么是新的以及如何确保不覆盖“较新”的属性值。

新服务不会更新对象的所有属性,只会更新选定的属性,但移动应用程序也可以更改这些属性。

我的想法:

我可以创建一个额外的版本属性,它指示可以由移动应用程序和外部服务更改的对象属性的版本。因此,移动应用程序将在更新中发送这两个版本。然后对象版本指示哪些属性用于从移动应用程序更新,第二个版本将处理可能同时从其他源更改的其他属性。如果服务器对象 version2 值相等,则存储移动应用程序值。如果不是,它们将被丢弃,因为在此期间有人更改了这些值。

问题

是否有人认为此解决方案存在缺陷,或者是否存在此类对象版本控制的现有设计模式?

【问题讨论】:

  • HTTP 为此目的使用ETags

标签: design-patterns versioning


【解决方案1】:

描述似乎与optimistic locking 匹配,这是一个经过验证的工作原理。悲观锁定是另一种选择,用户可以立即获得其他人已经锁定对象的反馈。

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 2021-05-07
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多