web-dev-qa-db-ja.com

適切なMVPでは何人のプレゼンターを使用する必要がありますか?

AndroidアプリをMVPを使用するようにリファクタリングしています。2つのフラグメントを持つアクティビティがあります。

シナリオ1(1人のプレゼンター):プレゼンターは各ビューを「知っています」。したがって、1つのビューが入力を受け取ると、プレゼンターメソッドが呼び出され、任意のビューのメソッドを呼び出すことができます。

  • 利点:柔軟
  • 欠点:プレゼンターが非常に大きくなる可能性がある

enter image description here

シナリオ2(3人のプレゼンター):各プレゼンターは自分のビューと他のプレゼンターしか知りません。それはそれが知っている他のプレゼンターまたはそれ自身の見解に対してのみメソッドを呼び出します。

  • 利点:厳密なモジュール性、フローはより明白かもしれません
  • 欠点:オーバーヘッドが多い(2つ以上のインターフェイスとプレゼンタークラス)。

enter image description here

これは1つのアクティビティのみを対象としており、アクティビティ間の通信は対象としていません。

MVPを使用する方法はどれですか、それともユースケースに依存しますか?

編集:最初のシナリオで説明した構造を使用する傾向があります。それは私にとって最も理にかなっています。私の唯一の問題は、これが適切なMVPであるのか、自分で何か新しいものを作成しているのかわからないことです(これは望ましくありません)。

4
Willi Mentzel

プレゼンターを相互に依存させることは、正しく聞こえません。依存関係は、1組のビューとプレゼンターを機能させるためにすべてのビューとすべてのプレゼンターが必要になるようなものです。

プレゼンター同士を独立させた方がいいと思います。すべてのプレゼンターが使用できる別のレイヤーにすべての共通機能を配置できます。

Androidアプリ)でのMVPモデルの大まかな理解から、単純なアプリは次のコンポーネントで構成されています。

enter image description here

複数のビューで構成され、各ビューに対応するプレゼンターが存在するアプリがある場合、次のアーキテクチャをお勧めします。

enter image description here

PresenterCommonは、個々のプレゼンターから独立していることを意図しています。既知の抽象インターフェースを使用してプレゼンターと通信できますが、特定のプレゼンターNに固有のことは何も知らないはずです。一方、プレゼンターNは、PresenterCommonを認識しており、直接呼び出すことができます。それに。 Presenter Nは、ある時点でPresenterCommonに登録する必要があります。

ビューのいずれかによるモデルへの変更は、抽象Presenterインターフェースを使用してPresenterCommonによって他のビューアーに通知されます。

4
R Sahu