如果您正在使用log_a(x) = log_n(x)/log_n(a)
模式并从本地和远程加载,那么在Repository
中让本地返回Maybe<T>
和远程返回Single<T>
是否有意义?
答案 0 :(得分:3)
当然!您可以使磁盘/内存缓存返回Maybe
,如果为空,则切换到Single
网络源返回。使得它更清洁和合乎逻辑,因为DB可能会或可能不会返回任何内容,并且网络响应通常是单一的。您的最终回复可能是Single
。
一个例子是:
@Override
public Single<E> get(long id) {
return fetchFromDb(id)
.switchIfEmpty(fetchFromNetwork(id))
.subscribeOn(schedulerProvider.io());
}
我像以前一样使用过它。事实上,上述内容深受纽约时报的影响,Store library
答案 1 :(得分:0)
是的,我有同样的情况,而我正在将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();
}