有人可以用尽可能简单的方式解释Model View Presenter模式是什么吗?与模型视图控制器有什么区别?哪个最好或者用于哪个目的?
答案 0 :(得分:57)
模型视图Presenter和模型视图控制器都试图解决相同的“关注点分离”问题。
您将发现的主要区别是模型视图控制器(MVC)通常在视图和某种某种模型之间实现某种耦合 - 因此给定视图专门用于提供给定对象的可视化(模型)。
在“模型视图展示器”模式中,您通常会发现Presenter负责处理模型,并决定从中构建某种可视化所需的信息。
在此图中,箭头表示依赖关系:
通常,您在讨论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的内容和原因。