Мы создаем приложение, основанное на Realm.Мы имеем следующую ситуацию
- Представьте себе базу данных Realm, которая содержит модель области
User
, которая имеет свойства FirstName и LastName - Список пользователей может меняться в любое время, и списокочень большой и хранится внутри Realm db
- Слой представления является представлением переработчика, но внутри представления переработчика нам точно не нужны FirstName и LastName, скорее нам нужен класс-оболочка (давайте назовем его
UserViewModel
) вокруг него, который будет содержать FullName = FirstName + LastName плюс некоторую дополнительную функциональность - Если бы не было необходимости декорировать объект
User
области во что-то еще, мы использовали бы RealmRecyclerViewAdapter
вместе с RealmResults<User>
и он всегда будет синхронизировать наше представление переработчика с исходными данными - Однако, поскольку нам нужно манипулировать данными и расширять их с помощью некоторых дополнительных свойств, нам нужен другой подход
Первым решением, которое мне пришло в голову, было использование расширений RxJava для Realm и Android для достижения этой цели.Псевдокод очень прост в теории
- Обрабатывать результаты, возвращаемые областью, как поток элементов
- Сопоставлять модель пользователя с UserViewModel
- Прослушивать изменения потока изаново заполнить представление рециркулятора с соответствующими изменениями
Однако я не смог реализовать это.Rx-расширения Realm содержат 2 типа методов - asFlowable
и asChangeSetObservable
.Первый возвращает Flowable<RealmResults<User>>
, второй возвращает Observable<ChangeSet<RealmResults<User>>>
.Кажется, мне следует использовать asChangeSetObservable
, поскольку он предоставляет все детали, которые изменились, и в конечном итоге я могу распространить эти события обратно на RecyclerView
.
Я также думал о повторном использовании разработанного мною элемента управления, который прекрасно сочетается с ObservableArrayList
и создает вокруг него универсальный RecyclerViewAdapter
, который обрабатывает все изменения коллекции.В этом случае моей проблемой, скорее всего, будет получение результатов из области, выполнение некоторых функций Rx и сопоставление результатов с ObservableArrayList
, для которого у меня уже есть RecycleViewAdapter
.
Проблема, описанная выше,простой пример, который, вероятно, может быть достигнут с помощью простых обходных путей (например, сохранение FullName в db).Но проблема отображения потока реактивных данных из Realm в представление переработчика гораздо шире.
Любые предложения очень ценятся и заранее спасибо