使用干净体系结构我的项目。在这种情况下,UI层与域层分开。因此,我认为UI层没有拥有领域实例会更好。正如领域的文档建议管理活动生命周期中的领域实例一样,我应该如何处理领域实例?
更清楚,我的项目太重了,无法更改所有对象延伸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);
}
});
}
如果您需要在代码中的UI和数据库层之间进行干净的分离,并且要抽象数据库逻辑,以便理想情况下,您的活动可以在不知道该层的情况下调用数据库层实施,然后领域可能不是您要寻找的。
REALM对象与Realm实例相关联,这意味着,如果您从领域实例检索对象,然后关闭该实例(您必须),则无法再使用该对象。打败了使用领域的全部目的。
如果您要使用领域,则应将领域逻辑密切与您的活动/服务等紧密相关,并且不要试图将其隐藏在单独的一层中,以便您对其进行完全控制。bk_hr>
.map(new Func1<RealmObject, T>() {
@Override
public T call(RealmObject realmObject) {
Object o = createObjectFromRealm(realmObject);
realm.close();
return o;
}
});
干净体系结构的主要方面之一是,主要库的隔离(即领域)。由于领域(RealMobject),因此无法在其创建的线程之外访问领域,因此保持领域&amp;这更重要。从代码的其余部分隔离的领域相关计算。
您在queryAsync()方法中使用rxjava,同时使用executeTransActionAsync()方法,它不使用RXJAVA的全部目的。您本可以这样做,
public void insert(T object){
final Realm realm = RealmProvider.getRealm();
realm.executeTransaction(realm1 ->
realm1.copyToRealmOrUpdate(createRealmObject(object)));
realm.close();
}
在一个良好的体系结构中,对于每个JSONMODEL类,都应有一个相应的RealMmodel类&amp;DAO(数据访问对象)。DAO类必须将JSONMODEL作为参数,并且必须返回JSONMODEL。所有与领域相关的操作都必须在DAO文件中受到限制,因此,除了DAO和Realmmodel以外,没有其他代码知道领域。
这是一篇有关领域最佳实践的文章,具有良好的架构
也是一个示例项目,证明了与MVP(模型视图主持人),RXJAVA,RETROFIT,RETROFIT,DAGGER,ANNOTATIONS&amp; amp;的样本项目。测试。https://github.com/viraj49/realm_android-injection-rx-test