【发布时间】:2011-03-21 18:18:56
【问题描述】:
请用一个简单的例子描述一下MVP-Passive View和MVP-Supervising controller的区别。最好展示如何使用 mvp 技术(被动视图和监督控制器)绑定数据并验证输入。谢谢
【问题讨论】:
标签: c# design-patterns
请用一个简单的例子描述一下MVP-Passive View和MVP-Supervising controller的区别。最好展示如何使用 mvp 技术(被动视图和监督控制器)绑定数据并验证输入。谢谢
【问题讨论】:
标签: c# design-patterns
区别在于视图层更新。
来自 MSDN 上的Model-View-Presenter pattern 页面:
更新模型时,视图也必须更新以反映更改。可以通过多种方式处理视图更新。 Model-View-Presenter 变体,Passive View 和 Supervising Controller,指定了实现视图更新的不同方法。
在被动视图中,演示者更新视图以反映模型中的变化。与模型的交互仅由演示者处理;视图不知道模型的变化。
在监督控制器中,视图直接与模型交互以执行可以声明式定义的简单数据绑定,无需演示者干预。演示者更新模型;它仅在需要无法以声明方式指定的复杂 UI 逻辑的情况下操作视图的状态。复杂 UI 逻辑的示例可能包括更改控件的颜色或动态隐藏/显示控件。图 1 展示了 Passive View 和 Supervising Controller 变体的逻辑视图。
决定使用被动视图还是监督控制器主要取决于您希望应用程序的可测试性。如果可测试性是您的应用程序的主要关注点,那么被动视图可能更合适,因为您可以通过测试演示者来测试所有 UI 逻辑。另一方面,如果您更喜欢代码简单性而不是完全可测试性,监督控制器可能是更好的选择,因为对于简单的 UI 更改,您不必在演示器中包含更新视图的代码。在被动视图和监督控制器之间进行选择时,请考虑以下几点:
- 这两种变体都允许您提高表示逻辑的可测试性。
- 被动视图通常比监督控制器提供更大的测试表面,因为所有视图更新逻辑都放在演示器中。
- 监督控制器通常比被动视图需要更少的代码,因为演示者不执行简单的视图更新。
进一步阅读:
被动视图:
http://martinfowler.com/eaaDev/PassiveScreen.html
http://codebetter.com/jeremymiller/2007/05/31/build-your-own-cab-part-4-the-passive-view/
监管者:
【讨论】: