什么是模型视图演示者?

有人可以请尽可能简单地解释模型视图展示器模式是什么? 与Model View Controller有什么不同? 哪个最好或为了哪个目的?

Martin Fowler有关于UIdevise模式的一个页面,他在其中定义并讨论了MVC,MVP和其他模式。

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

为了总结这些差异,MVC中的控制器对UI有更多的控制,并处理事件,而MVP中的主持人更加被动,只是通过UI呈现信息。

一般来说没有太大的区别,而且它们之间的界限通常是模糊的。

模型视图演示者和模型视图控制器都试图解决相同的“问题分离”问题。

你会发现主要的区别是模型视图控制器(MVC)通常是在视图和某种模型之间进行某种耦合的情况下实现的,因此给定的视图专门用于提供给定对象(模型)的可视化。

在Model View Presenter模式中,您通常会发现Presenter负责处理模型,并决定需要哪些信息来形成某种可视化。

在此图中,箭头表示依赖关系:

MVC和MVP依赖

通常你会在讨论ASP.NET MVC框架时听到这种模式讨论,并且遇到有关MVP模式的信息,并且它在ASP.NET WebForms中实现。 在我的经验中,通常认为WebForms本身就是一个MVP模式框架 – 这是不正确的。 然而,WebForms确实可以很容易地实现一个MVP模式 – 最好的资源是从模式和实践团队调查Web客户端软件工厂:

CodePlex网站: http : //www.codeplex.com/websf

一个伟大的截屏覆盖的主题: http : //www.pnpguidance.net/Screencast/MVPBundleScreencastWCSFModelViewPresenterDesignPattern.aspx

福勒把MVP分为两种模式:监督演示者和被动视图。
Aviad Ezra在这个主题上有一篇很好的文章http://aviadezra.blogspot.com/2008/10/model-view-presenter-design-pattern.html
我认为MVP对桌面应用程序更好,MVC应用程序对于web应用程序来说也是如此,因为在桌面上,Model有能力提升事件

海豚Smalltalk曾经有一个MVC的实施,但随后他们迁移到MVP。

这里是技术文件 ,概述了他们做了什么,为什么。

IBM的Taligent系统也使用MVP – 他们描述了这里的原因和原因。