3つのActivity
を含むRecyclerViews
があります。 RecyclerViews
にリモートリポジトリからのデータを入力する必要があります(3つの異なるリクエスト)。 ViewModels
で複数のActivity
を使用できますか、またはより良い解決策がありますか(ベストプラクティス)。
この場合、3つの異なるLiveDataオブジェクトを取り込む1つのビューモデルを使用することをお勧めします。これにより、3つのリクエストのいずれかが応答を受け取るたびにUIが更新されます。 LiveDataでRecyclerViewを使用する方法の詳細については、 Google Example をご覧ください。
アクティビティごとに複数のビューモデルがあると、複雑さが増すだけで、それを行うことの価値はないと思います。
オープン/クローズの原則 に従って、3つの異なるViewModel
sを作成する必要があります。複雑さはそれほど増加せず、対応するViewModel
を使用して1つのRecyclerView
を(または単に再利用して)Activity
を非常に簡単に移動できるようになります。
もちろん、ルールを破ることは理にかなっている場合があります。たとえば、RecyclerView
が再利用されるか、別の画面に移動される可能性がないことがわかっている場合は、1つのViewModel
。
ViewModel
(3つのリストがある場合でも)が常に非常にシンプルなままである場合(3つのLiveData
フィールド、それらを埋めるコードの数行)が同じ場合、この規則を破ることができます。
ただし、O/CP違反は良い習慣ではありません-意識的なルール違反です。
断片的に2つのrecyclerviewを取得しました。 2つのViewModelを使用する方が良いと思います。さまざまなリサイクラビューが独自のデータ要求を受け取り、状態処理、特に接続エラーが発生しました。この場合、異なるViewModelに分離しても複雑さは増しませんが、デカップリングのルールにうまく適合すると思います
さらに簡単には、1つのサービスクラスを使用するViewModelを1つ持つことができ、そのサービスクラスは3つのリポジトリを使用してデータを取得します。例えば:
XActivity
-> XViewModel
-> XService
-> {Arepository, Brepository, Crepository}