RxJava2中的存储库模式

时间:2017-12-18 16:56:21

标签: android repository-pattern rx-java2

如果您正在使用log_a(x) = log_n(x)/log_n(a)模式并从本地和远程加载,那么在Repository中让本地返回Maybe<T>和远程返回Single<T>是否有意义?

2 个答案:

答案 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();
}