ASP.NET MVP - 利用用户控件

9
我正在使用ASP.NET MVP(尝试监控控制器)和单元测试编写我的第一个应用程序,我遇到了一个小问题。我已经编写了3个用户控件,所有的测试都通过了,并且已经有了Presenter。现在我遇到了一个页面,需要将这三个用户控件组合起来,但是遇到了以下问题:
用户控件1是DateSelector,它是一个日历控件,还带有几个其他的按钮/列表。没什么特别的。
用户控件2是DailyList,猜猜它是什么。无论如何,如果您从GridView中选择/删除等操作,它需要填充用户控件3。
用户控件3是ItemDetail。这里有下拉列表、文本框等等,一些控件之间存在依赖关系(选择DropDown中的选项会影响DropDown 2中的选项)。
如果我从DateSelector中选择一个新日期,我应该从DateSelector Presenter中引发事件吗?我必须以某种方式让其他用户控件知道已选择了新日期,以便它们可以重新绑定数据,但是如何做呢?如果我使用页面的Presenter来订阅用户控件视图的Presenters,那么我不会公然违反Demeter法则(通过视图将Presenters公开为属性)。难道我不必使用页面的Presenter作为页面的全知控制器吗?我是否遗漏了什么?
到目前为止,我读到的所有东西都说:“MVP很棒,即使使用用户控件也不例外”,但是当涉及到示例时,使用用户控件就被方便地忘记了。在这个问题上,MVC似乎更符合我的思维模式,但目前,MVC不是一个选项。希望能得到帮助。谢谢。
1个回答

4
页面 Presenter 必须协调页面上的控件之间的交互。谁能代替它呢?我建议让页面 Presenter 监听 DateSelector 用户控件的事件。从页面 Presenter 的角度来看,它可能不需要知道是谁引发了该事件(视图或 Presenter),因为它将 DateSelector 视为一个完全封装的控件。内部工作应该对页面的 Presenter 隐藏。
页面 Presenter 只需要知道 DateSelector 用户控件引发了事件,现在它需要通知页面上的其他控件,可以通过自己引发事件或显式地调用 Presenter 上的方法来实现通知。

感谢您的澄清。我想我的真正问题是在哪里定义DateSelector的事件。由于我需要从页面访问该事件,因此必须在View中声明它(但可以从Presenter中引发)。顺便说一下,您的博客文章对我入门非常有帮助。谢谢! - jstephenson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接