0

私たちは MVP を使用していますが、問題自体は必ずしも MVP 固有のものではありません。基本的に、プレゼンターはモデルが変更されたかどうかを認識して、変更を処理してビューに反映できるようにする必要があります。

これはモデルでイベントを使用して簡単に実行できますが、モデルはモデルである他のオブジェクトでも構成されています。これらは、ルート モデルまたはそのプレゼンターを知らないプレゼンター + ビューによって変更できます。

このようなモデルの簡単な例を次に示します。

class Document
{
    Header header;
    List<Paragraph> paragraphs;
    Footer footer;
}

Document の表現を作成する 2 つのプレゼンターとビューがあるとします。DocumentEditPresenter/-View および DocumentPreviewPresenter/-View。

次に、ドキュメントを構成するモデル用のものがあります。HeaderPresenter/-View、ParagraphPresenter/-View および FooterPresenter/-View。

DocumentEditPresenter は、ビューからイベントを取得した後、Paragraph の ParagraphPresenter/-View の作成を開始します。次に、この ParagraphPresenter が Paragraph を変更します。DocumentEditPresenter と DocumentPreviewPresenter の両方が、更新するための何らかのシグナルを取得する必要があります。

解決策の 1 つは、すべてのモデルに、可能なすべての変更に関する親および/またはイベントへの参照が含まれていることですが、それは非常に複雑に見え、モデルの編集でエラーが発生しやすくなります。また、モデルはシリアライズ可能である必要があります。

WPF のルーティング イベントに似たものがあれば完璧です。

4

1 に答える 1

0

モデルが深い場合、「深い」からのイベントを聞くのは苦痛になります。

ファサードのように機能するマネージャーを使用してコードを整理し、モデルの変更が深くても、いずれかのマネージャーを通過するようにします。次に、マネージャーからイベントを発生させ、プレゼンターがそれを聞きます。

あなたのイベントは、更新をトリガーするための「ModelChanged」である可能性があります。

于 2013-02-15T23:00:10.510 に答える