什么是模型视图演示者?

blu*_*nte 56 model-view-controller mvp design-patterns

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

api*_*guy 60

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

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

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

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

MVC和MVP依赖项

通常,您在讨论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

  • 它肯定没有*,但这是更常见的实现.例如,如果使用ASP.NET MVC,最佳做法是使"视图"依赖于类型(创建强类型视图).典型的MVC实现将模型发送到视图,然后让视图决定如何处理它(从而创建依赖项),而在MVP中,View将逐字地询问演示者"我应该在此文本框中放置什么数据". (2认同)

Cam*_*and 29

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

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

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

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

  • 在任何一种情况下,你都参与模型,这是一件好事. (8认同)

Ant*_*wan 5

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