RxJava2 中的存储库模式
Repository pattern in RxJava2
如果您使用 Repository
模式并从本地和远程加载,让本地 return Maybe<T>
和远程 return Single<T>
在 RxJava2
?
当然!您可以将 disk/memory 缓存 return 设为 Maybe
,如果它为空,则从 Single
网络源切换到 return。使它更清晰和合乎逻辑,因为 DB 可能会或可能不会 return 任何东西,并且网络响应通常总是单一的。您的最终回复可能是 Single
.
例如:
@Override
public Single<E> get(long id) {
return fetchFromDb(id)
.switchIfEmpty(fetchFromNetwork(id))
.subscribeOn(schedulerProvider.io());
}
我以前也像上面那样用过。其实以上深受纽约时报影响,Store library
是的,当我将 rxjava2 应用于存储库模式时,我遇到了同样的情况。
我不想将我所有的改装服务从返回 Single 转换为 Maybe,
对于你的问题,只需使用 toMaybe()
我的 Rxjava2 存储库模式示例如下:
protected Maybe<Foo> loadDataFromCache() {
Foo foo = cachedDataHelper.getFoo();
return foo != null ? Maybe.just(foo) : Maybe.empty();
}
public Single<Foo> loadDataFromMultipleRepos () {
Maybe<Foo> apiCallObservable = new FooCallRx().getAPIObservable(context).toMaybe();
Maybe<Foo> cacheObservable = loadDataFromCache();
return Maybe.concat(cacheObservable, apiCallObservable)
.toSingle();
}
如果您使用 Repository
模式并从本地和远程加载,让本地 return Maybe<T>
和远程 return Single<T>
在 RxJava2
?
当然!您可以将 disk/memory 缓存 return 设为 Maybe
,如果它为空,则从 Single
网络源切换到 return。使它更清晰和合乎逻辑,因为 DB 可能会或可能不会 return 任何东西,并且网络响应通常总是单一的。您的最终回复可能是 Single
.
例如:
@Override
public Single<E> get(long id) {
return fetchFromDb(id)
.switchIfEmpty(fetchFromNetwork(id))
.subscribeOn(schedulerProvider.io());
}
我以前也像上面那样用过。其实以上深受纽约时报影响,Store library
是的,当我将 rxjava2 应用于存储库模式时,我遇到了同样的情况。 我不想将我所有的改装服务从返回 Single 转换为 Maybe,
对于你的问题,只需使用 toMaybe()
我的 Rxjava2 存储库模式示例如下:
protected Maybe<Foo> loadDataFromCache() {
Foo foo = cachedDataHelper.getFoo();
return foo != null ? Maybe.just(foo) : Maybe.empty();
}
public Single<Foo> loadDataFromMultipleRepos () {
Maybe<Foo> apiCallObservable = new FooCallRx().getAPIObservable(context).toMaybe();
Maybe<Foo> cacheObservable = loadDataFromCache();
return Maybe.concat(cacheObservable, apiCallObservable)
.toSingle();
}