如果我们使用短语“什么是MVC,MVP和MVVM设计模式之间的区别”搜索谷歌那么我们可能会获得一些URL的其中讨论MVC MVP和MVVM设计模式,理论上等之间的区别 :
MVP
在使用的情况下通过一个DataContext结合是不可能的。 Windows窗体就是一个很好的例子。 为了将视图从模型中分离,需要演示者。 由于视图不能直接绑定到演示者,信息必须传送到经由接口(IVIEW)的图。
MVVM
在通过一个DataContext结合的情况下使用是可能的。 为什么? 对于每个视图各种IVIEW接口被移除,这意味着维护更少的代码。 一些例子,其中MVVM可能包括WPF和使用JavaScript的淘汰赛项目。
MVC
使用在视图和程序的其他部分之间的连接并不总是可用的情况下(而不能有效地使用MVVM或MVP)。 这清楚地描述了一个Web API从发送到客户端浏览器的数据分离的情况。 微软的ASP.NET MVC是管理这种情况下一个伟大的工具,并提供了一个非常清晰的MVC框架
但是我还没有找到一个单一的物品,其具有示例代码理论上讨论的差异。
如果我得到一个文章与代码一起讨论这3种设计模式(MVC,MVP和MVVM)之间的差异将是非常好的。
我希望得到我的手对已经通过这三种设计模式(MVC,MVP和MVVM)实施3个类似的CRUD应用程序的源代码。 所以,我可以通过代码,并了解一个应该怎么写了这三种设计模式(MVC,MVP和MVVM)代码。
因此,如果任何此类物品存在哪些讨论代码会怎样看这3种设计模式(MVC,MVP和MVVM)不同,那么请重定向我那篇文章。
这应该是一个很好的入门。 在现实中,你所选择的“平台”也发挥你如何使用这些模式了很大的作用。 例如,MVVM自然是适合于WPF,而MVP Windows窗体效果很好。 ASP.Net MVC不言自明。
一些基本的差异可以写成短:
MVC:
传统的MVC是哪里有
- 型号:充当模型数据
- 查看:交易以期能在UI用户
- 控制:控制模型和视图,其中视图调用控制器更新模型之间的相互作用。 如果需要查看可以调用多个控制器。
MVP:
传统的MVC框架,而控制器类似的由主持人代替。 但主持人,不像控制器负责改变视图中。 该视图通常不叫主持人。
MVVM
这里的区别是视图模型的存在。 它是一种Observer设计模式,在模型中的更改在视图中代表以及由虚拟机的实现。 例如:如果一个滑块被改变时,不仅该模型被更新,但其可以是文本数据,在视图中被更新,以及所显示。 因此,有一个双向的数据绑定。
从链接很好的解释: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
让我们先来看看MVC
输入在控制器针对第一,不是视图。 该输入可以从一个页面交互的用户可以来,但它也可能是从简单的输入特定的网址到浏览器。 在任一情况下,其被接口与控制器开球某些功能。
还有就是控制器和视图之间的多到一的关系。 这是因为单个控制器可以选择不同的视图基于正被执行的操作,以进行渲染。
有一个从控制器的一种方式箭头查看。 这是因为视图没有到控制器的任何知识或引用。
该控制器并传回的型号,所以被传递到它的视图和期望模型之间的知识,而不是控制器服务不起来。
MVP -模型视图演示
现在,让我们来看看MVP模式。 它看起来非常相似,MVC,除了一些关键的区别:
输入始于视图,而不是主持人。
有视图和相关联的演示之间的一对一的映射。
该观点认为,在演示的参考。 演示者也反应在查看被触发的事件,所以它意识到鉴于其关联。
演示更新此基础上进行模型上的请求的动作来看,但观点是不知道建模。
MVVM -模型视图视图模型
所以,在我们面前的MVC和MVP模式,让我们来看看MVVM模式,看看它会有什么不同之处:
输入始于视图,不视图模型。
虽然观点主张向视图模型的引用,视图模型没有关于查看信息。 这就是为什么它可能有不同的视图和一个视图模型之间的一个一对多的映射......甚至是跨技术。 例如,WPF查看和Silverlight的视图可以共享同一个视图模型。
MVC,MVP,MVVM
MVC(旧)
MVP(更因为其低耦合的模块化的。演示是视图和模型之间的中介)
MVVM(你已经拥有双向VM和UI组件之间的结合,所以它更多的自动化比MVP)
另一幅图景:
文章来源: What is difference between MVC, MVP & MVVM design pattern in terms of coding c#