RXがAndroidおよびUIイベント処理に適していることがわかります。RXがバックエンドでどのようなメリットを提供するかを確認するのに苦労しています。
RX Javaはバックエンド処理用に設計されたのですか、それともこの概念は行き過ぎでしたか?
実際、RxJavaは、サーバー側の問題に取り組むために最初に実装されました。リアクティブ拡張機能は.NETの世界から始まり、Netflixによってバックエンド用にJavaに移植されました。 RxJavaは、Androidに採用される何年も前に、サーバー側のJavaプログラミングで使用されるようになりました。
当時、非同期および非ブロッキング処理は、サーバーのパフォーマンスを大幅に向上させることが証明されていました。これを達成するためにコールバックを使用することもできますが、コールバックはうまく構成されず、コールバック地獄につながります。機能的なコールチェーンスタイルを備えたRxJavaは、(優れた)ソリューションを提供し、採用され始めました。
次に、それはAndroidに広がり、ネットワーク呼び出しまたはUIイベントを処理します。私はAndroidでそれを使用して楽しんでいますが、RxJavaはサーバーよりもAndroidの方が家にいることが少ないことが常にわかりました。一般的な設計は他のサーバーテクノロジIMHOに概念的に近いため、.NETの世界では、最初からクライアント側でリアクティブ拡張が使用されていたことがわかっていても。しかし、AndroidでのRxJavaの使用には欠陥があるためです。サブスクリプションを追跡しないと、Context
が簡単にリークする可能性があります。そして、.observeOn(AndroidSchedulers.mainThread())
をほぼすべての場所に追加する必要があります。これは、時々忘れてクラッシュにつながることを忘れてしまいます。 Androidチームを率いて、 Livedata on Architecture components でObserverパターンを独自に取り入れたのはそのためだと思います。
コールバック地獄を解決することに加えて、RxJavaは開発者に提供します:
Android IMHOよりも、RxJavaはバックエンド処理に最適です。 Netflixがリアクティブ拡張機能をJavaに実装した理由と、バックエンドのメリットがどこにあるのかについて詳しく知ることができます here 。
サーバーサイドエンジニアに必要かどうかというと、必須ではないと思いますが、それを知っているとツールボックスが大幅に強化されます。今日、トレンドはますます非同期になり、非同期APIのみを提供するミドルウェア、ライブラリ、フレームワークがますます増えています。 Couchbase JavaデータベースAPIは、たとえばRxJavaに基づいています。さらに、リアクティブエクステンションはJavaだけでなく、ほとんどの言語でこの知識を活用できます。
私は、APIゲートウェイと従来のマイクロサービスの両方でRxJavaを使用しています。 Rxが取るに足らないことは、並列計算(またはI/O呼び出し)にローカルとグローバルの両方の制約があることです。私は、同様に機能する非反応性のソリューションを見つけていません。
とは言うものの、マイクロサービスが孤立して存在することはなく、すべてが他の何かに連絡する必要があります。
私の経験では、テストは特に複雑ではありません。追加のツールが必要ですが、それは1回限りの投資です。
ほとんどのrxチュートリアルは、subscribe
の方法を示すことに焦点を当てていることに気づきました。それは間違った抽象化レベルだと思います。 IMOオペレーターレベルの思考とテストははるかに便利です。