Мы в МЦЦ Томск сейчас ведем разработку CRM системы, в которой такая синхронизация нашла очень удачное применение. Как я и рассказывал в докладе, мы синхронизируем «словари» — редко меняющиеся значения списковых элементов, а также пользователей и роли — потому что обращение к ним требуется почти на каждом экране.
Конечно, в процессе внедрения столкнулись с некоторыми особенностями, о которых в докладе сказано не было:
- Мы синхронизируем DTO, но, например, UserDto зависит не только от сущности User БД. Например, она также содержит информацию о ролях. Соответственно, пришлось синхронизировать обновления User’ов при обновлении связанных сущностей.
- При инициализации синхронизации на стороне React необходимо следить за последовательностью действий. Мы делаем так:
- Стартуем SignalR-соединение и собираем все пришедшие изменения, но не применяем их.
- Запрашиваем текущие значения всех сущностей с Backend (
GET /users
). - После получения списка сущностей применяем все полученные изменения
- Продолжаем синхронизацию в обычном режиме (применяем изменения как только они приходят
- Процедуру инициализации соединения повторяем при разрыве SignalR-подключения
- Не все изменения в сущностях можно получить до вызова
SaveChanges()
. Например, идентификаторы новых сущностей (для которых будет выполнена командаINSERT
) недоступны доSaveChanges()
. Таким образом необходимо производить дополнительную обработку списка изменений послеSaveChanges
.
Если интересны детали или обновленные примеры кода — пишите, обсудим!
А также можете скачать презентацию как приятный бонус :)