Являются ли горячие не завершающие базы данных наблюдаемыми сценариями использования Rx? Проблема написания побочных эффектов - PullRequest
0 голосов
/ 27 мая 2019

У меня есть вопрос о мнениях, так как если это то, что многие люди делают, это случай использования Rx.

В приложениях обычно есть база данных sql, которая запрашивается пользовательским интерфейсом как наблюдаемая,который отправляется после загрузки запроса + изменения данных в любое время (Room / SqlDelight и т. д.)

Считывает звук нормально, однако возможно ли иметь "чистую" запись в базу данных?

Запись вбаза данных может выглядеть следующим образом

fun sync() = Completable.fromCallable {
   //  do something
   database.writeSomethingSynchronously()
}

SomeUi {
  init {
     database.someQueryObservable()
       .subscribe { show list }
   }
}

Представьте, что вы хотите отобразить индикатор выполнения, пока этот Completable находится в полете.То, что здесь эффективно происходит, влияет на базу данных.Это означает, что открытая база данных, которую можно наблюдать, будет переизлучать при записи данных, но еще до того, как функция sync () вернется (если для простоты предполагается однопоточность)

Теперь существует момент времени, когда в данных появляются новые данные.Пользовательский интерфейс и индикатор выполнения отображаются.(и еще хуже с временами многопоточности) Это недопустимое состояние.

В императивном мире синхронизация обеспечит обратный вызов завершения, в котором можно будет перезагрузить запрос вручную + синхронно показать / скрыть индикатор выполнения.(И каким-то образом заблокировать прослушиватель изменений базы данных на время записи синхронизации?)

Есть ли способ обойти это вообще?

...