Мой проект с использованием чистой архитектуры. В этой ситуации слой пользовательского интерфейса отделен от уровня домена. Поэтому я думаю, что было бы лучше, если бы слой пользовательского интерфейса не обладал экземпляром realm. Как правило, doc рекомендует управлять экземпляром realm в жизненном цикле Activity, как я должен обращаться с экземпляром области тогда?Какова наилучшая практика управления экземпляром области в чистой архитектуре?
Чтобы быть более понятным, мой проект слишком тяжелый, чтобы изменить все объекты, простирающиеся на RealmObject
. Поэтому я использую отдельный объект для постоянных данных. Когда завершение вызова api, бизнес-объект преобразуется в объект области, напротив, когда запрос из области. Я создаю метод следующим образом:
public void insert(T object){
final Realm realm = RealmProvider.getRealm();
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(createRealmObject(object));
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
realm.close();
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
realm.close();
}
});
}
На самом деле, он отлично работает. Но ниже я не знаю, как обращаться с закрывающим экземпляром области.
public Observable<T> queryAsync(Condition<? extends RealmObject> condition) {
final Realm realm = RealmProvider.getRealm();
return condition.getQuery(realm).findFirstAsync()
.asObservable()
.filter(new Func1<RealmObject, Boolean>() {
@Override
public Boolean call(RealmObject realmObject) {
return realmObject.isLoaded();
}
})
.map(new Func1<RealmObject, T>() {
@Override
public T call(RealmObject realmObject) {
return createObjectFromRealm(realmObject);
}
});
}
Спасибо за ответ. Я обновляю некоторые подробности выше. Я так понимаю, что он отказывается от самых удивительных преимуществ царства. Но архитектура проекта определена, поэтому можно ли использовать область в этом состоянии? –
@ZeatualChang Я думаю, что 'call' - последняя функция в цепочке, поэтому вы можете закрыть область там, см. Редактирование.Это может работать –
Я пробовал это, но операторы rx работают над асинхронным запросом арифметического потока witch. Это другой поток из одного экземпляра области. –