MVP MVC 和 MVVM 的区别

Posted

技术标签:

【中文标题】MVP MVC 和 MVVM 的区别【英文标题】:difference between MVP MVC and MVVM 【发布时间】:2012-07-09 04:21:12 【问题描述】:

伙计们,我浏览了许多链接/博客。我看到他们中的大多数人无法用外行语言清晰地交流,以及 MVP、MVVM 和 MVC 之间的技术差异。我知道每个角色代表什么,也曾为 MVP 工作过。但是真的不明白是否有人问我同样的问题。为什么我不能在 MvP 中使用控制器而不是 Presenter ?为什么在 MVVM 中查看模型而不是演示者,它有什么不同?我可以用一句话说“MVC 针对 ASP.NET 进行了优化,并且在 VS 中也有模板,MVP 针对 winforms 和针对 SL/WPF 的 MVVM 进行了优化,因为它支持内置绑定功能等”。但我觉得这不是我必须了解的,而是详细而深入的。有人可以通过详细的解释和用法以及选择一个的实际理由来阐明这一点。谢谢大家...

【问题讨论】:

这里有很多帮助:google.com/#q=difference+between+MVP+MVC+and+MVVM。我们能说这些博客中没有充分涵盖的内容是什么? @RobertHarvey:大多数博客实际上令人困惑,人们不断重复相同的复制粘贴。我不认为它的精确和所有人都可以理解。我也敢肯定,很多人像我一样,如果被问到,仍然无法清楚地解释这些差异。我更喜欢外行人的句子来解释 3 的差异,而且正如我所问的,如果我用 Present 替换 Controller 并用 View Model 替换 Presenter 会怎样。我想要这些类型的问题的答案。还有技术差异。 (因为所有的目标都是单一的) SO 是针对特定的编程问题。 @Divine 坦率地说,在一个答案中解释会很费力,而且存在一些相互矛盾的意见,也许您可​​以自己研究并提出更具体的问题。 @Divine 就像编程的许多部分一样,即使在阅读之后也很难理解,直到您真正在其中编程。没有多少程序员使用过 MVC、MVVM 和 MVP,即使他们使用过可能使用不同的语言/框架,所以找到好的比较是相当困难的,尽管我想了解自己。 【参考方案1】:

我不能给你一个完整的答案,但是我确实很难学习其中的一些模式,也许可以让你了解一些主要的区别。

我先学习了 MVVM,然后是 MVC。我知道 MVP 以及它在理论上是如何工作的,但我从未真正使用它构建过应用程序。

设计模式之间最大的区别似乎在于谁控制应用程序流程和逻辑。

MVVM 中,您的代码类 (ViewModels) 是您的应用程序,而您的 Views 只是一个非常用户友好的界面,位于应用程序代码之上并允许用户与之互动。这意味着ViewModels 的工作量很大,因为他们您的应用程序,负责从应用程序流程到业务逻辑的所有事情。

使用 MVC,您的 Views 是您的应用程序,而您的 Controller 处理应用程序流。应用程序逻辑通常在 ViewModels 中找到,它们被认为是 MVC 中 M 的一部分(旁注:MVC 中的 M 不能被认为与 MVVM 中的 M 相同,因为 MVC 的 M 层包含更多功能比 MVVM 的M 层)。给用户一个屏幕 (View),他们与之交互,然后向Controller 提交一些内容,Controller 决定谁处理数据并将新的View 返回给用户。

我没有使用过 MVP,但是我对它的理解与 MVC 非常相似,但针对桌面应用程序而不是客户端/服务器应用程序进行了优化。 Views 是实际应用程序,而Presenter 处理应用程序事件和业务逻辑。

【讨论】:

非常感谢 Rachel 分享您的知识和经验。这真的对我理解有很大帮助。我很感激。我会经历更多,再次感谢女士 :) 干杯 仅供参考,MVP 有两种形式:被动视图和监督控制器。被动视图与 MVC 完全不同。据我了解,MVP 也适用于 web (GWT)。 @GarrettHall 谢谢,我真的对 MVP 了解不多。我猜“被动视图”意味着它像 MVC 的 Controller 一样被动地等待事件消息并响应它们,而“监督控制器”意味着它更像 MVVM 的 ViewModel 那样负责整个应用程序流程?有点像一个被动的老板,只是在有问题时才干预你的工作,或者是一个喜欢对你的工作进行微观管理的控制型老板? :) @Rachel 哈哈,这是完美的类比。 我发现这个答案非常简单,而且可以说是不准确的。在 MVVM 中,VM 并不总是决定应用程序流。例如,在 WPF 中,应用程序流程可以完全在 V 中完成,代码隐藏为零。这个答案中的“应用程序”暗示了业务逻辑,如果是这样,你不要将业务逻辑放在 MVVM 中的 VM 中,也不要将 M 放在 MVC 中。作者完全错过了 MVVM 中 V 的全部要点,您通常会限制代码隐藏的数量,因此它们几乎不是“非常用户友好的界面”。 VM 的工作量不大。如前所述,您限制了放置在那里的业务逻辑的数量。【参考方案2】:

在 MVC 中,您将模型视图控制器链接为三角形 在 MVP 中,您有 Model View Presenter 链接的线性 基本上 MVC 和 MVP 非常相似,但是使用 MVC 更简单,即使你已经内置了 MS 插件来创建和分离你的 M-V-C 提供它的优势 使用 MVP,您的应用程序看起来像一个通用的 ASP.NET 应用程序,这意味着:没有 Razor,视图没有 .cshtml 等,您必须自己处理结构。 MVVM 通常用于 Silverlight/WPF,对于那些技术人员来说,它是最佳选择。 MVVM 和 MVC 的思想非常相似。 如果您使用淘汰赛,您还可以在 Web 应用的客户端应用 MVVM。

【讨论】:

以上是关于MVP MVC 和 MVVM 的区别的主要内容,如果未能解决你的问题,请参考以下文章

MVC, MVP, MVVM比较以及区别

MVC和MVP的区别

几张图解释mvc,mvp和mvvm的区别

mvc mvp mvvm区别

Android中MVC、MVP、MVVM的区别与使用

MVC / MVP / MVVM 到底是啥?