あなたが Repository
パターンとローカルとリモートからの読み込み、それは地元のリターンを持っている意味がある Maybe<T>
リモートリターン Single<T>
に RxJava2
?
回答:
回答№1の場合は3絶対に!ディスク/メモリキャッシュを Maybe
空の場合は、 Single
ネットワークソース。 DBが何かを返すかもしれないし、返さないかもしれないので、それはよりきれいで論理的になり、ネットワーク応答はたいていいつもSingleである。あなたの最終的な回答は、 Single
.
たとえば、次のようになります。
@Override
public Single<E> get(long id) {
return fetchFromDb(id)
.switchIfEmpty(fetchFromNetwork(id))
.subscribeOn(schedulerProvider.io());
}
私はそれを前のように使いました。実際、ニューヨークタイムズの影響を強く受けているのは、 ストアライブラリ
回答№2の場合は0
はい、同じケースがありましたが、私はrxjava2をリポジトリパターンに適用していました。 私はすべての私の改造サービスをシングルからアフェアに戻す必要はありませんでしたが、
あなたの質問については、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();
}