Я создаю веб-приложение, в котором пользователи могут редактировать заметки и делиться ими. Пользователи должны быть подключены к заметкам с ролями (владелец, чтение, чтение-запись). Это периодически подключаемая система, поэтому я решил выполнять синхронизацию с использованием CQRS и источников событий. После презентации Грега Янга [36:20 - 38:40], поток будет следующим:
- Клиент вносит изменения в автономном режиме.
- Клиент подключается к Интернету.
- Функция «хранить и пересылать» отправляет события, произошедшие, пока клиент был в автономном режиме.
- Клиент сравнивает локальные события с полученными событиями и выполняет слияние, решая, какие команды оставить. Затем обновляет локальную модель просмотра.
- Клиент отправляет на сервер сохраненные команды (созданные в автономном режиме).
- Сервер выполняет команды и генерирует события, которые хранятся в хранилище событий.
- "store and forward" хранит события, которые интересуют каждого пользователя, до тех пор, пока он не вернется в сеть.
Возникает вопрос: Как «хранилище и предисловие» решают, какие события следует отправлять каждому пользователю?
Очевидно, что отправка всех событий поставит под угрозу безопасность других пользователей.