Что можно почитать по теме? Какие есть принципы и бестпрактикс?
Приложение чрезвычайно простое - клиенты могут добавлять айтемы и менять их состояния. Необходимо обеспечить синхронизацию айтемов у клиентов.
Собственно проблема в том, что клиенты должны/могут работать без доступа к Интернету. После возобновления доступа нужно выполнить синхронизацию.
Пока идея такая - сделать отдельную таблицы экшенов и любое действие над item'ом заносить в эту таблицу как экшен (тем более что историю изменений надо хранить) и обмениваться только экшенами. У каждого экшена будет время его создания а значит их можно будет выстроить в непротиворечивую последовательность и применить каждом клиенте (и на сервере разумеется) последовательно.
Смущает то, что появляется два источника истины - сама последовательность экшенов и список (финальное состояние) айтемов. Кроме того пусть клиент A создал экшен 100, а клиент Б создал экшен 97. Последовательность применения экшенов на клиенте Б будет "нормальной" - сначала выполнится 97, потом 100, а последовательность на клиенте A будет анормальной - 100, потом 97.
Предположим оба экшена связаны со сменой статуса, тогда у клиента А и у клиента Б айтемы окажутся в разном статусе - нужен способ переупорядочивания экшенов...
Выходит что нужно обмениваться только экшенами, а список вычислять как их результирующую последовательность, что может стать проблемой когда экшенов будет много.