Я ищу шаблон проектирования для обновления серверного объекта из нескольких источников.
Текущая ситуация:
- Существует мобильное приложение, которое показывает и изменяет данные.
- Есть сервер, на котором хранятся данные с версией объекта
- Есть новые службы, которые также обновляют некоторые свойства объекта данных на сервере
Свойство версии объекта увеличивается каждый раз, когда объект изменяется на сервере. Мобильное приложение должно отправить текущую версию с новыми данными, чтобы не изменять более новую версию объекта на сервере. В этом случае выдается ошибка.
Так что это нормально, пока существует только связь между приложением и сервером, и приложение гарантирует, что оно обновляет свой локальный объект в случае, если на сервере есть более новый. .
Новое требование:
Появилась новая услуга, которая обновляет объект на сервере (возможно) одновременно с мобильным приложением. Таким образом, внешний источник отправляет новые данные на сервер, который обновляет объект и увеличивает его версию.
Тогда может случиться так, что мобильное приложение также отправит новые данные объекта, и теперь вопрос в том, что новее и как убедитесь, что не перезаписываются «более новые» значения свойств.
Новая служба обновит не все свойства объекта, а только выбранные, но эти свойства также могут быть изменены мобильным приложением.
Моя идея:
Я мог бы создать дополнительное свойство версии, которое указывает версию свойств объекта, которые могут быть изменены мобильным приложением и внешней службой. Таким образом, мобильное приложение отправит обе версии в обновлении. Затем версия объекта указывает, какие свойства используются для обновления из мобильного приложения, а вторая версия будет обрабатывать другие свойства, которые тем временем могут быть изменены из другого источника. Если значение серверного объекта version2 равно, значения мобильных приложений сохраняются. в противном случае они будут отброшены, потому что кто-то изменил эти значения за это время.
Вопрос
Видит ли кто-нибудь недостатки в этом решении или существуют ли существующие шаблоны проектирования для такого контроля версий объекта?