web-dev-qa-db-ja.com

Model-View-Presenter(MVP)スキームはAndroidに役立ちますか?

Androidでビューとプレゼンターを分離する方法。ユーザーアクションに対する反応(MVPのプレゼンター部分)は、GUI要素(MVPのビュー部分)を表示する同じアクティビティに設定されます。

「モデルビュープレゼンターでは、Martin FowlerまたはMichael Feathers [2]が言うように、UIのロジックはプレゼンターと呼ばれるクラスに分割され、ユーザーからのすべての入力を処理し、「ダム」ビューに何をいつ行うかを指示しますディスプレイ」( ここ から引用)。

今まで、私はAndroidがsmartアクションを実行し、アクションに反応して結果を表示するアクティビティ。MVPスキームはAndroid=哲学と矛盾していますか?Androidでそれを実現しようとするのは理にかなっていますか?はい、どのようにできますか?

34
Gangnus

Androidアプリケーションは、基本的にModel-View-Controller(MVC)を中心に構築されています。MVPは同じように聞こえますが、以前はその用語を聞いたことはありません。アクティビティはコントローラーの役割を果たし、XMLビューはそれだけです(ただし、アクティビティでプログラムによってそれらを作成しますcan XMLでそれを実行する方が簡単で簡単です)、そしてあなたが自分で書くモデルです。そのため、そのモデルは非常に実用的です。

このデザインモデルについてあまり聞いたことがないかもしれない考えられる理由は、Androidフレームワークがビューを分離することを強制することです。モバイルデバイス上のアプリケーションは小さい傾向があるため、人々はフルオンのMVCを使用する傾向があります。アクションレイヤーがモデルの(小さな)ジョブの多くを実行するビューレイヤーとアクションレイヤーに向かう傾向があります。

クロスプラットフォームアプリを作成している場合は、ビュー、アクション、ビジネスロジック、モデルという4層のアプローチを検討することをお勧めします。ビューレイヤーとアクションレイヤーはプラットフォーム固有ですが、ビジネスロジックとモデルは変更されません。基本的に、プレゼンターとユーザーインタラクションをアクションレイヤーに分割し、ビジネスロジックレイヤーを呼び出してユーザーが望むアクションを実行します。

15
Michael K

私はAndroidプログラミングの経験はありませんが、いくつかの入門Androidプログラミングチュートリアルをざっと見ていて、MVPが必要な理由がわかりません。他のイベント駆動型フレームワークのようにあまり有用ではありません。Activityクラスは、他のフレームワークのDialogまたはFormとそれほど変わらないため、「アプリケーションの任意のアクティビティサブクラスのActivitity Presenter "クラスで、コアロジックをそこに配置します。

「アクティビティ」に送信するイベントはプレゼンターに委任する必要があります。プレゼンターが独自にイベントを送信する場合、または他のシステム依存機能を呼び出す場合、アクティビティは、プレゼンターと共有するインターフェイスを介して関連する機能を提供する必要があります。しかし、それは基本的に私が知っている他のGUIフレームワークと同じです。

6
Doc Brown

MVPは間違いなくAndroidに役立ちます。コードの整理と単体テストに役立ちます。そして、最良の部分は、コードを読んでいる新しい人々がコードを理解できるようになり、何をどこに行けばよいかがわかったらすぐに貢献し始めることです。これは MVPの例を理解する への非常に役立つリンクです。

MVPの3つのコンポーネントすべてについて簡単に説明します

ビュー

Android MVPでは、ビューには2つのものが含まれます。アクティビティ– Androidリソースビュー– Javaインターフェースアクティビティはビューとそれを実装しますプレゼンターが自分自身(ビューインターフェース)を挿入して、プレゼンターがビューインターフェースを使用してアクティビティと会話できるようにします。図の最初の3つのブロックは、ビューとプレゼンター間の通信を示しています。

プレゼンター

Presenterは、ビューとデータ/モデルの間の中間層として機能します。 View(Activity)は、プレゼンターが何かを提示するようにコマンドを出し、プレゼンターはデータベース/モデルからデータを取得して、提示可能なデータの形式をビューに返します。次に、Viewがそのデータを画面に表示します。また、Presenterは単純なJavaクラスであり、Androidコンポーネントを含まないようにする必要があります。そうしないと、Presenterの単体テストが難しくなります。

プレゼンターでデータベースを使用する場合は、アクティビティでデータベースインスタンスを作成し、それをプレゼンターに挿入します。これは、ユニットテスト中にデータベースをモックするのに役立ち、ビジネスロジックをテストできるようになります。

モデル

MVPのモデルは、データソースにすぎません。 Viewはデータと直接対話せず、代わりにそれがPresenterにデータを処理するように命令し、それ以上の変更なしに表示できる情報を返します。

5
Ajit Singh