Dự án của tôi sử dụng kiến trúc sạch. Trong tình huống này, lớp giao diện người dùng tách biệt với lớp Miền. Vì vậy, tôi nghĩ rằng nó sẽ là tốt hơn các lớp UI không sở hữu trường hợp realm. Do doc của realm khuyên bạn nên quản lý cá thể của realm trong vòng đời của Activity, làm thế nào tôi nên đối phó với instance của realm sau đó?Thực hành tốt nhất về quản lý trường hợp realm trong Kiến trúc Sạch là gì?
Để rõ ràng hơn, dự án của tôi quá nặng để thay đổi tất cả các đối tượng mở rộng RealmObject
. Vì vậy, tôi sử dụng đối tượng riêng biệt cho dữ liệu liên tục. Khi kết thúc cuộc gọi api, một đối tượng nghiệp vụ chuyển đổi thành một đối tượng realm, ngược lại khi truy vấn từ cõi. Tôi tạo phương pháp như sau:
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();
}
});
}
Thực ra, nó hoạt động tốt. Nhưng dưới đây tôi không biết làm thế nào để xử lý trường hợp lĩnh vực đóng cửa.
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);
}
});
}
Cảm ơn bạn đã trả lời. Tôi cập nhật một số chi tiết ở trên. Tôi hiểu theo cách này, nó từ bỏ những lợi thế tuyệt vời nhất của vương quốc. Nhưng kiến trúc của dự án là xác định, vì vậy, có thể sử dụng lĩnh vực trong tình trạng này? –
@ZeatualChang Tôi tưởng tượng 'call' là chức năng cuối cùng trong chuỗi nên bạn có thể đóng cõi đó, xem phần chỉnh sửa.Nó có thể làm việc –
Tôi đã thử điều này, nhưng các nhà khai thác rx hoạt động trên truy vấn không đồng bộ realm phù hợp với chủ đề hoạt động trên. Nó là một chủ đề khác nhau từ một thể hiện realm được mở ra. –