9

ASP.NET MVP (Supervisory Controller の試行) と単体テスト (決して遅いよりはましです!) を使用して最初のアプリを作成していますが、少しジレンマに陥りました。私は 3 つのユーザー コントロールを作成しました。これらはすべてテストされ、インターフェイスが設定されており、Presenter が牽引されています。これら 3 つのユーザー コントロールを使用するページにたどり着きましたが、次の問題が発生しました。

ユーザー コントロール 1 は DateSelector です。これは、他のいくつかのボタン/リストを備えたカレンダー コントロールです。本当にエキサイティングなことは何もありません。

ユーザー コントロール 2 は DailyList です。それが何であるかを推測してください。とにかく、選択/削除などを行うことができます。グリッドビューから項目を選択する場合は、ユーザー コントロール 3 を設定する必要があります。

ユーザー コントロール 3 は ItemDetail です。ここに、DropDownLists、TextBoxes などがあります... 他のものへの依存関係が存在するものもあります (DropDown one でオプションを選択すると、DropDown 2 のオプションに影響します)。

DateSelector から新しい Date を選択した場合、DateSelector Presenter からイベントを発生させますか? データを再バインドできるように、新しい日付が選択されたことを他のユーザー コントロールに知らせる必要がありますが、どうすればよいでしょうか。ページのプレゼンターを使用してユーザー コントロール ビューのプレゼンターをサブスクライブすると、デメテルの法則 (ビューを通じてプレゼンターをプロパティとして公開する) を露骨に破ることになりませんか? ページのプレゼンターをページのすべてを知っているコントローラーとして使用してはいけませんか? 足りないものはありますか?

私がこれまでに読んだものはすべて、「ユーザー コントロールを使用しても MVP は素晴らしい」と述べていますが、例となると、ユーザー コントロールの使用は都合よく忘れられています。MVC の方が、この考え方の私のパターンにより近いように思えますが、現在、MVC はオプションではありません。ここでどんな助けも素晴らしいでしょう。前もって感謝します。

4

1 に答える 1

4

ページ プレゼンターは、ページ上のコントロール間の相互作用を調整する必要があります。他に誰がそれをするでしょうか?ページ プレゼンターが DateSelector ユーザー コントロールのイベントをリッスンするようにします。ページ プレゼンターの観点からは、DateSelector を完全にカプセル化されたコントロールと見なすため、誰がイベントを発生させたのか (ビューまたはプレゼンター) を知る必要はおそらくありません。内部の仕組みは、ページのプレゼンターから隠されている必要があります。

わかっているのは、DateSelector ユーザー コントロールがイベントを発生させたことだけであり、独自のイベントを発生させるか、プレゼンターでメソッドを明示的に呼び出すことによって、ページ上の他のコントロールに通知する必要があります。

于 2008-12-04T06:08:24.223 に答える