什么是MVP-Passive View和MVP-Supervising控制器

时间:2011-03-21 18:18:56

标签: c# design-patterns

请用一个简单的例子来描述MVP-Passive View和MVP-Supervising控制器之间的区别。最好显示如何使用mvp技术 - 被动视图和监督控制器来绑定控制数据并验证输入。感谢

1 个答案:

答案 0 :(得分:58)

区别在于视图层更新。

来自MSDN上的Model-View-Presenter pattern页:

  

更新模型时,还必须更新视图以反映更改。可以通过多种方式处理查看更新。 Model-View-Presenter变体,Passive View和Supervising Controller指定了实现视图更新的不同方法。

     

被动视图中,演示者更新视图以反映模型中的更改。与模型的交互仅由演示者处理;视图不知道模型的变化。

     

监督控制器中,视图直接与模型交互以执行简单的数据绑定,可以在没有演示者干预的情况下以声明方式定义。演示者更新模型;它仅在需要以声明方式指定的复杂UI逻辑的情况下才操纵视图的状态。复杂UI逻辑的示例可能包括更改控件的颜色或动态隐藏/显示控件。图1显示了被动视图和监督控制器变体的逻辑视图。

     

使用被动视图监督控制器的决定主要取决于您希望应用程序的可测试性。如果可测试性是应用程序中的主要问题,则Passive View可能更合适,因为您可以通过测试演示者来测试所有UI逻辑。另一方面,如果您更喜欢代码简单性而不是完全可测试性,则Supervising Controller可能是更好的选择,因为对于简单的UI更改,您不必在演示者中包含更新视图的代码。在Passive View和Supervising Controller之间进行选择时,请考虑以下因素:

     
      
  • 这两种变体都允许您提高表示逻辑的可测试性。
  •   
  • Passive View通常提供比Supervising Controller更大的测试表面,因为所有视图更新逻辑都放在演示者中。
  •   
  • 监督控制器通常需要的代码少于被动视图,因为演示者不会执行简单的视图更新。
  •   

进一步阅读:

被动观点:

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/