インタラクターとは何ですか? 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 パターンです。