What is difference between MVC, MVP & MVVM design pattern in terms of coding c#
如果我们使用短语"MVC、MVP&MVVM设计模式之间的区别是什么"搜索Google,那么我们可能会得到一些URL,讨论MVC MVP&MVVM设计模式之间的区别,理论上如下:
最有价值球员
在无法通过DataContext进行绑定的情况下使用。Windows窗体就是一个很好的例子。为了将视图与模型分开,需要一个演示者。由于视图无法直接绑定到演示者,因此必须通过接口(iView)将信息传递给视图。
MVVM
在可能通过DataContext进行绑定的情况下使用。为什么?每个视图的各种IView接口都被删除,这意味着要维护的代码更少。MVVM可能出现的一些例子包括使用淘汰的WPF和JavaScript项目。
MVC
在视图和程序其余部分之间的连接不总是可用(并且您不能有效地使用MVVM或MVP)的情况下使用。这清楚地描述了Web API与发送到客户机浏览器的数据分离的情况。微软的ASP.NET MVC是管理这种情况的一个很好的工具,它提供了一个非常清晰的MVC框架。
但是,我没有找到一篇文章来讨论与样本代码理论上的区别。
如果我能得到一篇文章来讨论这三种设计模式(MVC、MVP和MVVM)与代码之间的区别,那就太好了。
我想了解一下3个类似的CRUD应用程序的源代码,它们是由这三种设计模式(MVC、MVP和MVVM)实现的。这样我就可以浏览这些代码并了解如何为这三种设计模式(MVC、MVP和MVVM)编写代码。
因此,如果存在任何这样的文章,讨论这3种设计模式(MVC、MVP和MVVM)的代码看起来会有什么不同,那么请将我重定向到这篇文章。
一些基本的区别可以简而言之:
MVC:
传统的MVC是
最有价值球员:
与传统的MVC类似,但是控制器被表示器所取代。但是与控制器不同,演示者也负责更改视图。视图通常不调用演示者。
MVVM
这里的区别在于视图模型的存在。它是观测器设计模式的一种实现,其中模型中的更改也由VM在视图中表示。如果一个滑块被改变,不仅模型会被更新,而且视图中显示的数据也会被更新。所以有一个双向数据绑定。
这应该是一个很好的开端。实际上,您选择的"平台"在您如何使用这些模式方面也扮演着重要的角色。例如,MVVM很自然地适合于WPF,而MVP与Windows窗体配合得很好。ASP.NET MVC代表它自己。
链接提供了很好的解释:http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
让我们先看看MVC
输入首先指向控制器,而不是视图。输入可能来自与页面交互的用户,但也可能来自于在浏览器中输入特定的URL。在这两种情况下,它都是一个控制器,与之接口以启动某些功能。
控制器和视图之间存在多对一关系。这是因为单个控制器可以根据正在执行的操作选择要呈现的不同视图。
从控制器到视图有一个单向箭头。这是因为视图对控制器没有任何知识或引用。
控制器确实会传递模型,因此视图和传递到其中的预期模型之间存在知识,但不会传递给它服务的控制器。
MVP–模型视图演示者
现在我们来看看MVP模式。它看起来与MVC非常相似,除了一些关键区别:
输入以视图开始,而不是演示者。
视图和关联的演示者之间有一对一的映射。
该视图保存对演示者的引用。演示者还对从视图触发的事件做出反应,因此它知道与之关联的视图。
演示者根据其在模型上执行的请求操作更新视图,但该视图不了解模型。
MVVM–模型视图模型
因此,当MVC和MVP模式摆在我们面前时,让我们看看MVVM模式,看看它有什么区别:
输入以视图开始,而不是视图模型。
当视图包含对视图模型的引用时,视图模型没有关于该视图的信息。这就是为什么可以在不同的视图和一个视图模型之间建立一对多的映射…甚至跨技术。例如,WPF视图和Silverlight视图可以共享同一个视图模型。
MVC、MVP、MVVM
MVC(旧的)
MVP(由于耦合度低,所以模块化程度更高。演示者是视图和模型之间的中介)
MVVM(您已经在VM和UI组件之间具有双向绑定,因此它比MVP更自动化)
另一个形象: