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