伝統的なアーチ
個人的には、これまでサービスの使用は実装が面倒だと感じていましたが、最終的には適切に構成され、一貫した優れたエクスペリエンスでした。しかし、スレッド化のパフォーマンスは...管理が難しいです。
サービス
クエリ -> データベースの負荷 -> 通知
UI
は、クエリとカーソルの読み込みを開始します - > UI を更新します。
ボレーのみ
ボレーを使用すると、以前はサービスとデータベース内で処理されていたコンポーネント全体をスキップしたくなります。
UI
ボレー リクエスト -> ボレー レスポンス -> UI の更新
ただし、これは、表示しようとしているデータや、次の要件のいずれかに対してクエリを実行しているサーバーによっては、すぐに崩壊します。
- 表示されているデータが同じ URL で完全に記述されていない (例: ページ)
ユーザーは下にスクロールして、さらに多くのページを表示する可能性があります。ただし、ユーザーがアクティビティに戻ったり、単に回転したりした場合でも、ページを構成する他のすべてのクエリを具体的に覚えていない限り、Volley の呼び出しは最初のページの結果のみを返します。これは、より便利になることを意図したアーキテクチャにとっては大変な作業になります。または、わずかに異なるページであっても、ユーザーが電話を回転させるだけの場合、一貫性のないエクスペリエンスになる可能性があります。
変更をローカルに適用してから、いつでもサーバーに適用する方が簡単です。ボレーのみでは、REST の更新と (以前のすべてのクエリの) 再クエリを同期的に行う必要があります。
ボレーは本当に速いです。ただし、クエリしているサーバーに依存する可能性のある利用可能なキャッシュヒットを除いて、永続性がありません。積極的なキャッシングは、古いデータでアプリに大混乱をもたらすことさえあります。ローカル データベースからプルすると、過去のクエリで実際にデータを参照している可能性のある複数のアクティビティをナビゲートするときに、一貫性のある高速なエクスペリエンスが提供されます。純粋なボレー エクスペリエンスでは、以前のクエリから技術的には既に持っているが、そのデータを取得するための中央データ ストアがないデータに対してクエリを実行する必要がある場合があります。
ハイブリッドボレーとカーソル
最近は実際にサービス部分をスキップしていますが、それ以外はすべて従来のアーチのままです
UIがボレー クエリとカーソル ロードを開始 - > UI を更新
ボレークエリ-> データベースの更新 -> 通知
また、UI がサービスに ping を実行し、サービスがボレーを使用することを妨げるものは何もありません...より伝統的に見えますが、より多くの制御ロジックをより集中化された場所に移動する価値があるかもしれませんが、それが内部から実行されているという事実「サービス」は実際には技術的な利点を提供しません。
概要
それが役立つことを願っています。基本的に、ボレーだけにしようとしないでください。私が試してみたところ、それがうまくいった場合、非常に具体的でシンプルなアプリになり、主な落とし穴を特定できたことを願っています.
また、サービス中なのにロボスパイスでも同じような落とし穴を見つけてしまいました… しかし… YMMV