0

Handlerを呼び出してサーバーからデータを取得するプレゼンターがいますが、既存のビューのミニチュアバージョンである別のウィジェットにも同じデータが必要ですが、これはアプリケーションで常に表示されます。

ここで私が共通しているのは、ハンドラー、同じハンドラー、およびアクションオブジェクトの呼び出しです。

設計するための最良の方法は何ですか。

私の考えられる解決策:1)ディスパッチャーオブジェクト(Ginjectorを介して注入)にアクセスできる1つのCommonクラスを作成し、メソッドを使用してデータを取得します。ただし、MVPアーキテクチャに従って、ディスパッチャの使用はプレゼンタのみに制限されていますが、これはプレゼンタ以外のクラスです。

4

2 に答える 2

1

イベントバスを使用している場合、プレゼンター(ハンドラーを呼び出す)は新しいデータでイベントを発生させ、ミニチュアウィジェットはイベントバスに登録してそれらを受信できます。このように、1人のプレゼンターだけがサーバーに呼び出し、クライアント上のすべてのものにイベントを使用して通知できます。

于 2013-03-18T22:29:17.500 に答える
1

MVPAFAIKは、すべてがで行われなければならないということについては何もありませんPresenterPresenters複数に共通するロジックを1つの共通クラス にカプセル化することは理にかなっています。

MVP石で書かれたルールというよりはむしろパターンです。したがって、それが理にかなっている場合は、パターンから少し逸脱することができます。

私見共通クラスは正しいアプローチです。
バックエンドへのリクエストを処理するために共通のクラスを使用すると、たとえばキャッシュや認証を簡単に実装することもできます。

あなたPresentersと共通のクラスの間のコミュニケーションを行うには2つの方法があります:

  1. Presenters共通クラスのシングルトンインスタンスを、データを必要とするすべてのものに注入します。プレゼンターから、共通クラスのメソッドを呼び出して、コールバックを登録できます。
  2. グローバルEventBusを共通クラスに注入し、対応するクラスからEvent(ie LoadDataEvent)を起動し、PresentersこれEventを共通クラスで処理します。Eventデータがバックエンドから受信されると、共通クラスから別の(つまり)を起動DataLoadedEventし、対応するで処理できPresentersます。

解決策1 はおそらく実装が簡単ですが、共通クラスとPresenter(依存性注入を使用する場合はそれほど悪くはありません)の間にある程度の結合があります。

ソリューション2には、もう少しコードが必要です(イベントを定義する必要があります)が、多くの柔軟性と分離を提供します。たとえばPresenter、データにも関心のある新しいものを作成する場合DataLoadedEventは、プレゼンターにハンドラーを登録するだけで完了です。

于 2013-03-19T09:09:33.833 に答える