2016-03-02 34 views

答えて

62

MVPは神の活動の問題(あまりにも多くの行を持って活動/フラグメント)を取り組むために存在します。

必須ではありませんが(任意のパターンでコーディングできます)、多くの開発者はMVPがAndroidに適していることに同意します。あなたのソースコードをより洗練された、テスト可能な、メンテナンス可能で堅牢なものにします。

インタラクターを「モデル/コントローラー」と考えることができます。インタラクターは、データベース、Webサービス、またはその他のデータソースからデータをフェッチします。データを取得した後、インタラクターはデータを発表者に送信します。したがって、あなたのUIを変更します。

インターラクティブを別のクラスで使用する利点は、クラスをデカップリングして、クリーナーとテスト可能にすることです。確かに、あなたはプレゼンターの内部クラスにインタラクターを置くことができますが、何がポイントですか?プレゼンターにインタラクターを配置することの欠点は、プレゼンタークラスを大きくして読み込みと管理が比較的難しくなることです。

更新:もちろん このわずか-単純化である、あなたは深く掘るしたい場合は、fernando cejas blogまたはantonio leiva blog

+0

明確な答えです。インタラクタをRxJavaに置き換えることは実現可能か、それとも良いですか? –

+1

@JiaqiLiu可能ですが、必ずしもそうではありません。 Interactorを使用するためにRxJavaは必要ありません。他のライブラリと同様に、RxJavaは単なるツールです。あなたのニーズに合った最適なツールを見つけましょう。並行通貨が多い場合は、RxJavaを使用してください。 – aldok

6

Interactorには、アプリケーションのユースケースが含まれています。つまり、プロジェクトのビジネスドメインのすべての実装が含まれます。

Architecturing Android Applications, using the MVP pattern.の非常に整理された記事があります。私は非常に勉強することをお勧めします。

また、私はMVPパターンとInstagramのAPIを使用して、JuicyInstaと呼ばれるアンドロイドアプリケーションを作成した、which is shared here on github.

+1

これは私には明らかではないようです。この記事を読むことは、実際にはこの質問を促したものです。「ビジネスドメインの実装」は何を意味するのでしょうか? – bkach

+0

@bkach私の理解では、ビジネスが銀行のために何をするのかを定義するインターフェースがあります。引退、譲渡、預金などの方法でインターフェースを作成します。今、このインターフェースの実装がありますクライアントに応じて言ってみましょうか?または、ビジネスルールによって指示されるように。しかし私は間違っている可能性があります。 –

2

は個人的に私は私のためのモデルと異なっていることを表示、現状とインターアクターを使用することがあります。

インタラクタは、データベース、サーバーなどからデータを取得するのに便利な方法を持つクラスとして考えることができます。データを取得したら、モデルをInteractorに移入してPresenterに戻すことができます。

E.G. Asynctaskを作成してユーザーを認証し、受け取ったデータをUserModelに移入するLoginInteractorを持つことができます。

5

インタラクタは、ドメイン層とプレゼンテーション層を分離するクラスです。 簡単な言い方をすれば、UIを操作するために使用されるコード(ビジネスロジックをUI /アニメーション/ナビゲーションにバインドする)とは別にビジネスロジックを記述する方法を提供します。

したがって、インタラクタはPresenter/ViewModelとリポジトリパターンの間のメディエータです。

私はMVPでインタラクタパターンを使用していませんが、私はMVVMでも使っています。インタラクタは、ユースケースに対して互換的に使用できます。

たとえば、リストに表示するカテゴリを取得する場合を考えてみましょう。

  • View(Activity/Fragment)は、categoryListを取得するためにPresenter/ViewModelのメソッドを呼び出します。
  • はその後、プレゼンターは
  • インターアクターがcategoryListを取得するために、リポジトリの(CategoryRepository)メソッドを呼び出します
  • Webサービスからカテゴリ(リモートデータソース)をフェッチするかどうかを決定するためのロジックを持っています
  • リポジトリまたはDBからcategoryListを取得するために相互作用因子のメソッドを呼び出しますストレージ(ローカルデータソース)またはキャッシュ(一時記憶域 - リポジトリクラスで可変にすることができます)。
  • リポジトリからcategoryList(選択されたデータソースからフェッチされたもの)がInteractorに返されます
  • InteractorはcategoryList(何らかのフォーマットなど)を処理してPresenterに送信します。何も処理が
  • プレゼンターをパラメータとしてcategoryListとビューのメソッドを呼び出します必要ない場合インターアクターが直接プレゼンターにリストを送信することができます
  • ビューがアニメーションの有無にかかわらず、このプロセスの相互作用因子で回避することができることを

注意をcategoryListが表示されますしたがって、リポジトリ - >インタラクタ - >プレゼンタのようなデータフローを使用する代わりに、リポジトリ - >プレゼンタでこのように通信することができます。ここではプレゼンターはプレゼンテーション/ドメイン層の一部となります。上記のように、インタラクタは、これらの2つのレイヤのセパレータとして機能します。

これらは参照

ために、この概念を説明するためにいくつか簡潔に書かれたブログです私はこれが良いでインターアクターの役割を理解する上であなたを助けることを願っています方法