web-dev-qa-db-ja.com

複数のViewModelを使用したアクティビティ

3つのActivityを含むRecyclerViewsがあります。 RecyclerViewsにリモートリポジトリからのデータを入力する必要があります(3つの異なるリクエスト)。 ViewModelsで複数のActivityを使用できますか、またはより良い解決策がありますか(ベストプラクティス)。

18
Martin

この場合、3つの異なるLiveDataオブジェクトを取り込む1つのビューモデルを使用することをお勧めします。これにより、3つのリクエストのいずれかが応答を受け取るたびにUIが更新されます。 LiveDataでRecyclerViewを使用する方法の詳細については、 Google Example をご覧ください。

アクティビティごとに複数のビューモデルがあると、複雑さが増すだけで、それを行うことの価値はないと思います。

10
guglhupf

オープン/クローズの原則 に従って、3つの異なるViewModelsを作成する必要があります。複雑さはそれほど増加せず、対応するViewModelを使用して1つのRecyclerViewを(または単に再利用して)Activityを非常に簡単に移動できるようになります。

もちろん、ルールを破ることは理にかなっている場合があります。たとえば、RecyclerViewが再利用されるか、別の画面に移動される可能性がないことがわかっている場合は、1つのViewModel

ViewModel(3つのリストがある場合でも)が常に非常にシンプルなままである場合(3つのLiveDataフィールド、それらを埋めるコードの数行)が同じ場合、この規則を破ることができます。

ただし、O/CP違反は良い習慣ではありません-意識的なルール違反です。

断片的に2つのrecyclerviewを取得しました。 2つのViewModelを使用する方が良いと思います。さまざまなリサイクラビューが独自のデータ要求を受け取り、状態処理、特に接続エラーが発生しました。この場合、異なるViewModelに分離しても複雑さは増しませんが、デカップリングのルールにうまく適合すると思います

2
Thomas Liao

さらに簡単には、1つのサービスクラスを使用するViewModelを1つ持つことができ、そのサービスクラスは3つのリポジトリを使用してデータを取得します。例えば:

XActivity-> XViewModel-> XService-> {Arepository, Brepository, Crepository}

0
Rowland Mtetezi