1. ホーム
  2. java

Android MVP:インタラクターとは?

2023-10-27 11:26:19

質問

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

どのように解決するのですか?

この記事を書いている時点(2016年)で、多くのプロジェクトはMVCパターンの悪いバージョンを使って書かれています。Activity/Fragment/Controllerのコード行数が多すぎるのです。この問題は、一般に神アクティビティと呼ばれています。この問題を解決するために、クラスをモデル、ビュー、プレゼンターに分離するMVPが人気を集めています。

しかし、MVPだけでは十分ではなく、InteractorやRepositoryのパターンも出てきています。

インターアクターとは何でしょうか?MVP設計の中でどのように適合するのでしょうか?

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

  • GetUser
  • プロファイルの更新
  • ステータスの削除
  • などなど。

データを取得した後、インタラクターはそのデータをプレゼンターに送ります。プレゼンターは、いつ、どのようにそのモデルを使ってUIに変更を加えるかを決定します。

インタラクタを使うということは、ビジネスロジックを切り離すということです。

インタラクタを使うということは、ビジネスロジックを切り離すということであり、コードは再利用可能で、よりシンプルで、テストしやすいものになります。

<ブロッククオート

インタラクタを使うのと、インタラクタのコードをプレゼンターに入れるのとでは、どのようなメリット/デメリットがあるのでしょうか?

例えば、コードが単純で、別のクラスに抽出する必要がないと確信がある場合、プレゼンターにインタラクタのコード("interactor code")を置くことができます。しかし、interactor を使用することにした場合、interactor は他のプレゼンターで再利用することができます。

リポジトリについてはどうですか?

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

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

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

これをData Sourceと呼ぶ人もいますが、私はこの用語は互換性があると考えています。

更新(2021年)しました。 MVP+Interactorはまだ使えるのに。Android Jetpackを使ったMVVMパターンが、Googleに好まれるUIパターンです。