Шаблон проектирования для управления версиями объекта, измененный несколькими источниками - PullRequest
0 голосов
/ 07 августа 2020

Я ищу шаблон проектирования для обновления серверного объекта из нескольких источников.

Текущая ситуация:

  • Существует мобильное приложение, которое показывает и изменяет данные.
  • Есть сервер, на котором хранятся данные с версией объекта
  • Есть новые службы, которые также обновляют некоторые свойства объекта данных на сервере

Свойство версии объекта увеличивается каждый раз, когда объект изменяется на сервере. Мобильное приложение должно отправить текущую версию с новыми данными, чтобы не изменять более новую версию объекта на сервере. В этом случае выдается ошибка.

Так что это нормально, пока существует только связь между приложением и сервером, и приложение гарантирует, что оно обновляет свой локальный объект в случае, если на сервере есть более новый. .

Новое требование:

Появилась новая услуга, которая обновляет объект на сервере (возможно) одновременно с мобильным приложением. Таким образом, внешний источник отправляет новые данные на сервер, который обновляет объект и увеличивает его версию.

Тогда может случиться так, что мобильное приложение также отправит новые данные объекта, и теперь вопрос в том, что новее и как убедитесь, что не перезаписываются «более новые» значения свойств.

Новая служба обновит не все свойства объекта, а только выбранные, но эти свойства также могут быть изменены мобильным приложением.

Моя идея:

Я мог бы создать дополнительное свойство версии, которое указывает версию свойств объекта, которые могут быть изменены мобильным приложением и внешней службой. Таким образом, мобильное приложение отправит обе версии в обновлении. Затем версия объекта указывает, какие свойства используются для обновления из мобильного приложения, а вторая версия будет обрабатывать другие свойства, которые тем временем могут быть изменены из другого источника. Если значение серверного объекта version2 равно, значения мобильных приложений сохраняются. в противном случае они будут отброшены, потому что кто-то изменил эти значения за это время.

Вопрос

Видит ли кто-нибудь недостатки в этом решении или существуют ли существующие шаблоны проектирования для такого контроля версий объекта?

1 Ответ

0 голосов
/ 08 августа 2020

Описание похоже соответствует optimisti c блокировке , что является проверенным и рабочим принципом. Блокировка Pessimisti c - еще одна альтернатива, при которой пользователь может сразу получить ответ, что кто-то уже заблокировал объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...