什么是模型视图演示者?

时间:2009-08-23 03:32:36

标签: model-view-controller design-patterns mvp

有人可以用尽可能简单的方式解释Model View Presenter模式是什么吗?与模型视图控制器有什么区别?哪个最好或者用于哪个目的?

4 个答案:

答案 0 :(得分:57)

模型视图Presenter和模型视图控制器都试图解决相同的“关注点分离”问题。

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

在“模型视图展示器”模式中,您通常会发现Presenter负责处理模型,并决定从中构建某种可视化所需的信息。

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

MVC and MVP dependencies

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

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

精彩的截屏视频主题:http://www.pnpguidance.net/Screencast/MVPBundleScreencastWCSFModelViewPresenterDesignPattern.aspx

答案 1 :(得分:28)

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

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

总结这些差异,MVC中的控制器可以更好地控制UI并处理事件,而MVP中的演示者更加被动,只是通过UI呈现信息。

一般情况下,差异并不大,而且它们之间的界线往往模糊不清。

答案 2 :(得分:5)

Fowler将MVP分为两种模式:监督演示者和被动视图 Aviad Ezra有一篇关于这个主题的好文章http://aviadezra.blogspot.com/2008/10/model-view-presenter-design-pattern.html
我认为MVP更适合桌面,而MVC适用于网络应用,因为在桌面模式中,模型具有提升事件的能力

答案 3 :(得分:3)

Dolphin Smalltalk曾经有一个MVC实现,但随后他们迁移到了MVP。

这里的the technical paper概述了他们的所作所为和原因。

IBM的Taligent系统也使用了MVP - 它们描述了here的内容和原因。