でCompletableは、私のような新しいRxJava Sources
に非常に興奮しています:クリーナー、インターフェイスクラスを作成し、あなたの「ソース」の作成中に多くのミスを防ぐSingle
、Maybe
、Completable
、 (例えば、を呼ぶのを忘れる)rxJava2、たぶん、複雑なストリーム
しかし、複雑なストリームにそれらを結合するには、多くの定型文が必要です。
など。我々はデータの読み込みとキャッシュの一般的なAndroidの状況があります。我々は2元api
とcache
を持っているし、我々はそれを組み合わせるしたいと仮定しましょう:
public interface Api {
Single<Integer> loadFromNetwork();
}
public interface Cache {
Maybe<Integer> loadFromCache(); //maybe because cache might not have item.
}
はのは、それを組み合わせるしてみましょう:
final Single<Integer> result = cache.loadFromCache()
.switchIfEmpty(api.loadFromNetwork());
Maybe
が過負荷Maybe.switchIfEmpty(Single):Single
を持っていないので、それは、コンパイルされません
ので、我々はすべてのものに変換する必要があります。
final Single<Integer> result = cache.loadFromCache()
.switchIfEmpty(api.loadFromNetwork().toMaybe())
.toSingle();
を
それを組み合わせるための別の可能な方法もсonversionが必要です。
final Single<Integer> result = Observable.concat(
cache.loadFromCache().toObservable(),
api.loadFromNetwork().toObservable()
).firstOrError();
だから私は、コードのノイズを追加し、余分なオブジェクトの多くを作成し、多くの変換せずに新しいソースを使用する方法が表示されません。
このような問題のため、私はSingle
,Maybe
、Completable
を使用できず、引き続きObservable
を使用しています。
だから私の質問は次のとおりです。
Single
、Maybe
、Completable
を組み合わせるのベストプラクティスは何ですか。なぜこれらのソースにはコーミングを簡単にするためのオーバーロードがないのですか?
なぜこれらのソースに共通の祖先がなく、
のパラメータがswitchIfEmpty
と他の方法で使用されているのですか?
P.S.誰もこれらのクラスに共通の階層がない理由を知っていますか?
私は、Completable
のコードでも動作するコードがあれば、Single
とMaybe
で正常に動作しますか?
ベストプラクティスを除いて、[this](https://stackoverflow.com/a/43890691/6774854)はすべてをカバーしていると思います。おそらく 'switchIfEmptySingle'のようなメソッドが必要な場合は、それを求めることができます。 – masp
アイテムをキャッシュで使用できず、ネットワークからアイテムをロードするときに、ネットワークコールによってキャッシュされたデータも更新したいですか? 私が言っていることは、なぜ2つを組み合わせたいと思うかということです。例えば、あなたがキャッシュストレージとルームデータベースを持っていて、 'Flowable'を持つテーブルを見ているとします。このストリームは、あなたのクエリに特有のものがなければ出ません。同時にリクエストを送信し、返されたデータがあり、それをあなたのテーブルに置くと、それが異なっている場合、 'Flowable'が放出されます。 – arubin