什么是模型视图演示器? [关闭]
Posted
技术标签:
【中文标题】什么是模型视图演示器? [关闭]【英文标题】:What is Model View Presenter? [closed] 【发布时间】:2010-11-22 00:10:42 【问题描述】:有人可以尽可能简单地解释一下模型视图演示者模式是什么吗?与模型视图控制器有什么区别?哪个最好或用于哪个目的?
【问题讨论】:
【参考方案1】:Model View Presenter 和 Model View Controller 都试图解决相同的“关注点分离”问题。
您会发现的主要区别是模型视图控制器 (MVC) 通常是通过视图和某种模型之间的某种耦合来实现的 - 因此给定视图专门用于提供给定对象的可视化 (型号)。
在模型视图演示者模式中,您通常会发现演示者负责处理模型,并决定需要其中的哪些信息来形成某种可视化。
在此图中,箭头表示依赖关系:
通常,您在讨论 ASP.NET MVC 框架时会听到这种模式讨论,并且会遇到有关 MVP 模式及其在 ASP.NET WebForms 中的实现的信息。根据我的经验,人们普遍认为 WebForms 本身就是一个 MVP 模式框架——这不是真的。然而,WebForms 确实让 MVP 模式的实现变得非常容易——为此,您最好的资源是调查 Patterns and Practices 团队的 Web Client Software Factory。
【讨论】:
我不确定那些依赖箭头是否正确。在 MVC 中,为什么 View 对 Model 有依赖? 当然不是必须,但这是更常见的实现。例如,如果您使用 ASP.NET MVC,最佳实践是让您的“视图”依赖于类型(创建强类型视图)。典型的 MVC 实现将模型发送到视图,然后让视图决定如何处理它(从而创建依赖项),而在 MVP 中,视图将逐字询问演示者“我应该在这个文本框中输入什么数据。”跨度> 【参考方案2】:Dolphin Smalltalk 曾经有一个 MVC 实现,但后来他们迁移到了 MVP。
这里是the technical paper,概述了他们做了什么以及为什么。
IBM 的 Taligent 系统也使用了 MVP - 他们描述了 here 的内容和原因。
【讨论】:
TwistingTheTriad.PDF 链接不再有效。 已修复“扭曲三合会”网址。 @daf 我真的很想阅读,但 TwistingTheTriad.PDF 目前进入空白页 =(【参考方案3】:Fowler 将 MVP 分为 2 种模式:Supervising Presenter 和 Passive View。 Aviad Ezra 有一篇关于这个主题的好文章 http://aviadezra.blogspot.com/2008/10/model-view-presenter-design-pattern.html。 我认为 MVP 更适合桌面,而 MVC 更适合 Web 应用,因为在桌面中,Model 具有引发事件的能力
【讨论】:
我发现 Aviad Ezra 的参考文章对我开始在我的 WinForms 桌面应用程序中使用 MVP 架构模式很有帮助。包含的示例代码很容易理解。 您可以使用 ajax 调用或 websockets 引发事件。它实际上是关于服务器端的。【参考方案4】:Martin Fowler 有一个关于 UI 设计模式的页面,他在其中定义并讨论了 MVC、MVP 和其他模式。
http://martinfowler.com/eaaDev/uiArchs.html
总结差异,MVC 中的 Controller 对 UI 有更多的控制权,并处理事件,而 MVP 中的 Presenter 更被动,只是通过 UI 呈现信息。
一般来说没有太大区别,而且它们之间的界限往往很模糊。
【讨论】:
在任何一种情况下,你都参与了模型,这一定是件好事。以上是关于什么是模型视图演示器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 iPad 不会在结束编辑时关闭选择器视图但 iPhone 会
警告:在演示或关闭过程中尝试从视图控制器 <ViewController> 关闭