MVC / MVP / MVVM 到底是啥?

Posted

技术标签:

【中文标题】MVC / MVP / MVVM 到底是啥?【英文标题】:MVC / MVP / MVVM What the Heck?MVC / MVP / MVVM 到底是什么? 【发布时间】:2010-11-20 20:53:11 【问题描述】:

我最近参与了一个 .Net WPF 项目,以构建一个零售点系统,这是我第一次使用 MVP 模式。我花了一点时间来理解方法的改变,但一旦我这样做了,我认为这个概念很震撼!

我的问题是:MVC、MVP 和 MVVM 有什么区别?如果有明显的区别,是否有关于何时应该使用一种模式而不是另一种模式的指导方针?

如果有人可以就此提供指导,或指出解释差异的文章,我将非常感激。

【问题讨论】:

如果 WPF 是默认使用 MVVM 模式开发的 Silverlight,你怎么能使用 MVP? What are MVP and MVC and what is the difference? 的可能重复项 【参考方案1】:

Microsoft 的应用程序架构指南描述了 MVC 和 MVP,并探讨了两者之间的差异。

http://www.codeplex.com/AppArch

这篇 MSDN 文章描述了 MVVM 及其演变。

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

【讨论】:

【参考方案2】:

通过查看在特定框架中实现的特定模式可能很难理解模式之间的差异。这篇 msdn 文章 WPF MVVM 参考了 Martin Fowlers 的原创文章,这些文章将模式解释为一般方法:

早在 2004 年,Martin Fowler 发表了一篇关于名为 Presentation Model (PM) 的模式的文章 [...] 认为 MVVM 是更通用的 PM 模式的一种专门化, 为 WPF 和 Silverlight 平台量身定制。

因此,要了解不同的模式,查看 Martin Fowler 对不同方法的描述很有用。他的Passive View 模式是MVP 方法。他的Supervising Controller 模式是MVC 方法。他的Presentation Model 模式是MVVM 方法。这个older article 讲述了这种模式的演变。

查看不同语言的实现也可能会有所帮助。文章Implementing event-driven GUI patterns using the ZK Java AJAX framework 在现代Java 框架中对比了上面提到的三种Martin Fowler 模式。即使它是与 WPF 不同的语言和不同的框架,它可能有助于查看模式而不是模式的实现以查看它以不同的语言完成。

【讨论】:

以上是关于MVC / MVP / MVVM 到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章

这些图中箭头的图例是啥(MVC - MVP - MVVM)?

MVCMVP和MVVM模式的基础认识

MVCMVP和MVVM模式的基础认识

MVI与MVC和MVVM相比有啥区别

mvc mvp mvvm的区别

mvvm框架是啥 它和其他框架的区别