Android MVP: インタラクターとは何ですか? 質問する

Android MVP: インタラクターとは何ですか? 質問する

インタラクターとは何ですか? MVP デザインにどのように適合しますか? インタラクターを使用する場合と、プレゼンターにインタラクター コードを配置する場合の利点と欠点は何ですか?

ベストアンサー1

執筆時点 (2016 年) では、多くのプロジェクトが MVC パターンの不適切なバージョンを使用して作成されています。アクティビティ/フラグメント/コントローラーのコード行数が多すぎる場合です。この問題は一般に God Activity と呼ばれます。クラスをモデル、ビュー、プレゼンターに分離することでこの問題を解決する MVP が普及しつつあります。

しかし、MVP だけでは不十分で、Interactor と Repository パターンも登場しています。

インタラクターとは何ですか? MVP デザインにどのように適合しますか?

インタラクタは、モデルの作成、読み取り、更新、削除 (CRUD) を行う「ユーティリティ」クラスと考えることができます。インタラクタは、リポジトリからデータベース、Web サービス、またはその他のデータ ソースからデータを取得します。インタラクタは、モデルを取得するための「動詞」または「アクション」です。

  • ユーザーを取得
  • プロフィールを更新
  • 削除ステータス
  • 等々..

データを取得した後、インタラクターはデータをプレゼンターに送信します。プレゼンターは、モデルを使用して UI を変更するタイミングや方法を決定します。

インタラクタを使用するということは、ビジネス ロジックが分離されることを意味します。分離されているため、コードは再利用可能で、よりシンプルで、テスト可能です。

インタラクターを使用する場合と、プレゼンターにインタラクター コードを配置する場合の利点と欠点は何ですか?

たとえば、コードが十分に単純で、別のクラスに抽出する必要がないと確信している場合は、「インタラクター コード」をプレゼンターに配置できます。ただし、インタラクターを使用することにした場合、インタラクターは他のプレゼンターで再利用できます。

リポジトリはどうですか?

リポジトリは、データベースへの接続など、CRUD 操作の実装の詳細を担当するクラスです。

リポジトリには、モデルを取得するための実装の詳細が含まれています。

class UserRepository {
    fun connectToDb() {}
    fun getUser(): User {}
}

これをデータ ソースと呼ぶ人もいますが、これらの用語は同じ意味であると私は考えています。

更新(2021):MVP + Interactor は依然として有用ですが、Android Jetpack を使用した MVVM パターンは、Google が推奨する UI パターンです。

おすすめ記事