0

私はイベント駆動型開発に不慣れであり、コア/UI境界を通過する必要のあるイベントを実装しようとすると迷子になります。

私のプログラムには次のものがあります(c#の例):

UI.RuleForm   Core.RuleList     UI.ResultForm
Cell 1        Rule 1
Cell 2        Rule 2
Cell 3        Rule 3

私が欲しいのは、RuleFormセルが変更されると、の対応するルールを更新することRuleListです。また、RuleList変更があった場合、resultFromはルールから再計算されます。

私の現在の考えは、コアロジックをUIロジックから分離するために(つまり、コアはUIについて何も知らないはずです)、コアはイベントのみを生成し、他の人が生成したイベントを処理しないようにする必要があるということです。

したがって、変更イベントUI.RuleListWrapperを処理して更新できるようなものを作成する必要があります。用語では、使用できるイベントを発生させる必要があります。RuleFormCore.RuleListRuleListOnChangeUI.ResultForm

要約すると、私の質問は次のとおりです。

私の推論と目的の実装が大丈夫かどうかを知りたいのですが、これはおそらく、コアモジュールが外部UIによって生成されたイベントを処理できるかどうかを意味します。 私の分離はある種の「潔癖症」ですか、それとも以前に行われたことがありますか。他にもっと良いアプローチはありますか?

4

1 に答える 1

2

タグを設定しmvcます。MVCには、データとビジネスロジック(または必要に応じてドメイン固有のロジック)を含むモデルがあります。データを表示し、ユーザー入力を受け入れるVIEWがあります。ビューには、最小限のコードが含まれています。最後に、ビューとモデルを結び付けて全体を調整するCONTROLLERがあります。

あなたの例で欠けている部分はコントローラーです。

MVCパターンは一般的なアイデアを公開しますが、実装の詳細は指定しません。したがって、まったく異なる動作をするMVCの実装が見つかります。

モデルは、ビューまたはコントローラーについて何も知りません。通常、ビューはコントローラーを認識しません。MVCを実装する際の主な課題は、M、V、C間で通信するための適切な方法を見つけることです。.NETを使用する場合は、オブジェクトデータバインディングを利用して、ビューをモデルに直接バインドすることをお勧めします。 。(これは「純粋な」MVCではないかもしれませんが、これは誰にも害を及ぼしません。)モデルはを実装する必要がありますINotifyPropertyChanged。これにより、モデルは、詳細を知らなくても、ビューおよびコントローラーと通信できます。コントローラはオプションでサブスクライブできますPropertyChangedたとえば、コントロールを有効または無効にするようにビューに指示するなど、プロパティが変更されたときに適切なアクションを実行するためのモデルのイベント。コントローラは、ビューのボタンクリックイベントもサブスクライブし、適切なアクションをトリガーします。

コントローラは他のコントローラと通信することもできるため、あるMVCトリオでの操作の結果を別のビューに表示できます。

于 2012-05-01T15:04:34.020 に答える