Сценарий
У меня есть следующие компоненты, которые составляют приложение в стиле проверки
- Веб-приложение (планирует новые проверки и обновления/удаляет запланированные проверки до тех пор, пока они не будут отправлены на устройство)
- База данных (хранит запланированные проверки)
- Служба WCF Restful (возвращает последние данные расписания пользователя устройства по запросу)
- И приложение PhoneGap (отображает список запланированных проверок пользователя устройства, сохраняя данные, возвращенные из службы WCF, в локальном хранилище)
Он начнется с того, что веб-пользователь запланирует новые проверки для мобильного пользователя и сохранит их в базе данных. Пользователь устройства войдет в мобильное приложение и обновит свой список расписаний, чтобы ему были возвращены и отображены последние запланированные элементы. Затем веб-пользователь может создавать/обновлять/удалять проверки в любое время.
Проблема
Каждый раз, когда пользователь устройства обновляет свой список расписаний, все его данные расписания будут возвращены и добавлены в локальное хранилище. Это означает, что будут созданы дубликаты, поскольку некоторые данные уже могли быть на устройстве.
Решение
Чтобы предотвратить появление дубликатов, я добавлю в базу данных дополнительное поле, чтобы пометить элемент как «полученный приложением», чтобы помеченные элементы можно было игнорировать в следующий раз, когда пользователь устройства обновляет свой список расписаний, и чтобы веб-пользователь не обновлял или удаление их.
Лазейки в этом разрешении
- Если я отмечаю элементы как «полученные приложением» в веб-службе, когда список возвращается, может возникнуть ошибка между возвратом данных из службы WCF и получением их устройством, что означает, что они никогда не достигали устройства. Это может привести к тому, что элементы будут помечены как «на устройстве», хотя это не так.
- В качестве альтернативы, если я решу подождать, пока устройство не получит список, а затем отправлю сообщение обратно в базу данных, чтобы сказать, что устройство получило элементы, это сообщение может быть отправлено не сразу из-за отсутствия подключения к Интернету. Это означает, что пользователь веб-портала может обновить или удалить запланированный для пользователя элемент, даже если он находится на его устройстве.
Мой вопрос
Я хотел бы знать, есть ли у кого-нибудь эффективное решение для управления этой лазейкой или мне следует изменить какие-либо шаги в сценарии для начала, чтобы эта лазейка не появлялась?