design-patterns - MVP和MVC和的区别是什么?

  显示原文与译文双语对照的内容

当查询超过了放射性 ( drag-drop和配置)的方式创建用户界面,许多工具鼓励你很可能会碰到三个设计模式称为 Model-View-ControllerModel-View-PresenterModel-View-ViewModel 。 我的问题有三个部分:

  1. 这些模式有哪些问题?
  2. 它们是如何相似的?
  3. 它们是如何不同的?
时间:

这是这些设计模式的许多变体的一个 oversimplification,但这是我想考虑两者之间差异的原因。

MVC

MVC

MVP

enter image description here

下面是表示通信流的插图

enter image description here

enter image description here

也值得记住的是,有不同类型的mvp 。 Fowler将该模式分为两个被动视图和监督控制器。

当使用被动视图时,你的视图通常实现一个fine-grained接口,它的属性映射或多或少地映射到 underlaying UI小部件。 例如你可能有一个具有名称和地址的ICustomerView 。

你的实现可能类似于:


public class CustomerView : ICustomerView
{
 public string Name
 { 
 get { return txtName.Text; }
 set { txtName.Text = value; }
 }
}

你的演示器类将与模型对话并将它的"映射"。 这种方法称为"被动视图"。 好处是该视图易于测试,在用户界面平台( 站点,Windows/xaml, 等等 ) 之间更容易移动。 缺点是你不能利用像数据绑定( 在这样的框架中 WPFSilverlight, 这是真的强大) 这样的东西。

第二种风格的MVP是监督控制器。 在这种情况下,视图可能有一个名为Customer的属性,它再次被重新绑定到用户界面小部件。 你不必考虑同步和micro-manage视图,监视控制器可以在需要时进入和帮助,例如使用compled交互逻辑。

MVP的第三个"口味"( 或者有人会把它叫做独立模式) 是在 PresentationModel ( 或者有时引用 Model-View-ViewModel ) 。 你的MVP相比,你可以将M 和P 转换成一个类。 你的用户对象是你的UI小部件所绑定到的数据,但是你还有其他UI-spesific字段,如"isbuttonenabled","isreadonly"等。

我认为在用户界面架构中找到的最好的资源是由 Jeremy Miller在上完成的一系列博文。 他覆盖了所有的MVP风格,并展示了 C# 代码来实现它们。

YouCard我还在博客中了解关于Model-View-ViewModel模式的上下文中的Silverlight over: 实现ViewModel模式 。

...