android – 在Clean Architecture中管理领域实例的最佳实践是什么?

我的项目使用干净的架构.在这种情况下,UI层与Domain层分开.所以我认为UI层不拥有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 ObservableirstAsync()
            .asObservable()
            .filter(new Func1omrealm(realmObject);
                }
            });
}
最佳答案
如果您希望在代码中的UI和数据库层之间进行清晰的分离,并且希望抽象出数据库逻辑,以便理想情况下您的活动可以在不知道该层是如何实现的情况下调用数据库层,那么Realm可能不是您所需要的寻找.

Realm对象绑定到realm实例,这意味着如果从realm实例检索对象然后关闭该实例(必须这样做),则无法再使用该对象.这违背了使用Realm的全部目的.

如果您要使用Realm,您应该将领域逻辑与您的活动/服务等紧密相关,并且不要试图将其隐藏在单独的层中,以便您可以完全控制它.

        .map(new Func1omrealm(realmObject);
                realm.close();
                return o;
            }
        });

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...