User interface MVP和MVC是什么?有什么区别?
当您超越许多工具鼓励的(拖放和配置)构建用户界面的方式时,可能会遇到三种设计模式,分别称为、和。我的问题分为三个部分:User interface MVP和MVC是什么?有什么区别?,user-interface,model-view-controller,design-patterns,terminology,mvp,mvc,adr,action-domain-responder,User Interface,Model View Controller,Design Patterns,Terminology,Mvp,Mvc,Adr,Action Domain Responder,当您超越许多工具鼓励的(拖放和配置)构建用户界面的方式时,可能会遇到三种设计模式,分别称为、和。我的问题分为三个部分: 这些模式解决了哪些问题 它们有什么相似之处 它们有何不同 这两个框架都旨在分离关注点——例如,与数据源(模型)的交互、应用程序逻辑(或将数据转换为有用信息)(控制器/演示者)和显示代码(视图)。在某些情况下,该模型还可以用于将数据源转换为更高级别的抽象。这方面的一个很好的例子是 有一个关于MVC和MVP之间差异的讨论 区别在于,在MVC应用程序中,传统上视图和控制器与模型交互,
这两个框架都旨在分离关注点——例如,与数据源(模型)的交互、应用程序逻辑(或将数据转换为有用信息)(控制器/演示者)和显示代码(视图)。在某些情况下,该模型还可以用于将数据源转换为更高级别的抽象。这方面的一个很好的例子是 有一个关于MVC和MVP之间差异的讨论 区别在于,在MVC应用程序中,传统上视图和控制器与模型交互,而不是彼此交互 MVP设计让演示者访问模型并与视图交互 尽管如此,根据这些定义,ASP.NET MVC是一个MVP框架,因为控制器访问模型以填充没有逻辑的视图(只显示控制器提供的变量)
要了解ASP.NET MVC与MVP的区别,请查看Scott Hanselman的文章。我不久前在博客中引用了以下内容: 以下是它们之间的主要区别 模式: MVP模式
- 视图与模型的耦合更加松散。演讲者是 负责将模型绑定到 景色
- 更容易进行单元测试,因为与视图的交互是通过 接口
- 通常视图到演示者一对一映射。复杂的视图可能有 多主持人
- 控制器是基于行为的,可以跨多个应用程序共享 观点
- 可以负责确定要显示的视图
- MVP=模型视图演示者
- MVC=模型视图控制器
- 这两种呈现模式。它们分离了模型(想想域对象)、屏幕/网页(视图)和UI的行为方式(演示者/控制器)之间的依赖关系
- 它们在概念上非常相似,人们根据口味对演示者/控制器进行不同的初始化
- 一篇关于差异的好文章是。最值得注意的是MVC模式具有更新视图的模型
根据某些事件/请求创建或访问控制器。然后,控制器创建适当的视图,并与模型交互以进一步配置视图。它归结为:控制器创建和管理视图;视图从属于控制器。视图不了解控制器。另外值得记住的是,还有不同类型的MVP。福勒将这种模式分为两种:被动视图和监控控制器 使用被动视图时,视图通常会实现一个细粒度的界面,其属性或多或少直接映射到底层UI小部件。例如,您可能有一个具有名称和地址等属性的ICCustomerView 您的实现可能如下所示:
public class CustomerView : ICustomerView
{
public string Name
{
get { return txtName.Text; }
set { txtName.Text = value; }
}
}
您的Presenter类将与模型对话并将其“映射”到视图。这种方法被称为“被动观点”。其好处是该视图易于测试,并且更易于在UI平台(Web、Windows/XAML等)之间移动。缺点是您无法利用数据绑定(在和等框架中,数据绑定功能非常强大)
MVP的第二种风格是监控控制器。在这种情况下,视图可能有一个名为Customer的属性,该属性再次被数据绑定到UI小部件。您不必考虑同步和微观管理视图,并且监控控制器可以在需要时介入并提供帮助,例如使用复杂的交互逻辑
MVP的第三种“风格”(或者有人可能会称之为单独的模式)是表示模型(或者有时称为模型-视图-模型)。与MVP相比,您将M和P“合并”为一个类。您有您的用户界面小部件数据绑定到的客户对象,但也有额外的用户界面专用字段,如“IsButtonneEnabled”或“IsReadOnly”等
我认为我找到的关于UI架构的最好资源是Jeremy Miller在。他涵盖了MVP的所有风格,并展示了实现MVP的C代码
我也在博客中介绍了Silverlight over at的模型-视图-模型模式。MVP不一定是视图负责的场景(例如,请参阅Taligent的MVP)。我发现不幸的是,人们仍在鼓吹这是一种模式(视图负责),而不是一种反模式,因为它与“它只是一种视图”(实用主义程序员)相矛盾。“它只是一个视图”表示向用户显示的最终视图是应用程序的次要关注点。微软的MVP模式使得视图的重复使用变得更加困难,并且可以方便地为微软的设计师提供借口,避免鼓励不良做法 坦率地说,我认为潜在的 Action in the View -> Call to Controller -> Controller Logic -> Controller returns the View.