什么是MVP-Passive View和MVP-Supervising controller?

41

请用一个简单的例子描述 MVP-Passive View 和 MVP-Supervising Controller 之间的区别。最好展示如何使用 MVP 技术 - Passive View 和 Supervising Controller 进行数据绑定和输入验证。谢谢。

1个回答

69

区别在于视图层的更新。

来自 MSDN 上的 Model-View-Presenter 模式 页面:

当模型更新时,视图也必须更新以反映更改。视图更新可以通过多种方式处理。模型-视图-表示器变体(被动视图和监控控制器)指定了实现视图更新的不同方法。
在"被动视图"中,表示器更新视图以反映模型中的更改。与模型的交互由表示器专门处理;视图不知道模型中的更改。
在"监控控制器"中,视图直接与模型交互,执行可以在声明方式下定义的简单数据绑定,无需表示器干预。表示器更新模型;仅在需要指定复杂UI逻辑的情况下,它才操纵视图状态。复杂UI逻辑的示例可能包括更改控件的颜色或动态隐藏/显示控件。图1说明了被动视图和监控控制器变体的逻辑视图。
选择使用"被动视图"还是"监控控制器"主要取决于您希望应用程序具有多少可测试性。如果测试性是应用程序的主要关注点,则"被动视图"可能更合适,因为您可以通过测试表示器来测试所有UI逻辑。另一方面,如果您更喜欢代码简洁而不是完全可测试性,则"监控控制器"可能是更好的选择,因为对于简单的UI更改,您不必在表示器中包含更新视图的代码。在"被动视图"和"监控控制器"之间进行选择时,请考虑以下内容:
- 两种变体都允许您增加演示逻辑的可测试性。 - "被动视图"通常提供比"监控控制器"更大的测试面,因为所有视图更新逻辑都放置在表示器中。 - "监控控制器"通常需要比"被动视图"更少的代码,因为表示器不执行简单的视图更新。

进一步阅读:

被动视图:

http://martinfowler.com/eaaDev/PassiveScreen.html

http://codebetter.com/jeremymiller/2007/05/31/build-your-own-cab-part-4-the-passive-view/

监督控制器:

http://martinfowler.com/eaaDev/SupervisingPresenter.html

http://codebetter.com/jeremymiller/2007/05/25/build-you-own-cab-part-3-the-supervising-controller-pattern/


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