MVC,MVP和MVVMdevise模式在编码方面有什么区别c#

如果我们使用“MVC,MVP和MVVMdevise模式有什么区别”这个短语来searchGoogle,那么我们可能会得到一些理论上讨论MVC MVP和MVVMdevise模式之间差异的URL

MVP

在无法通过数据上下文进行绑定的情况下使用。 Windows Forms就是一个很好的例子。 为了从模型中分离视图,需要演示者。 由于视图不能直接绑定到演示者,信息必须通过接口(IView)传递给视图。

MVVM

在可以通过数据上下文进行绑定的情况下使用。 为什么? 每个视图的各种IView接口被删除,这意味着更less的代码来维护。 MVVM可能的一些例子包括使用Knockout的WPF和javascript项目。

MVC

在视图和程序其余部分之间的连接不总是可用的情况下使用(并且不能有效地使用MVVM或MVP)。 这清楚地描述了Web API与发送到客户端浏览器的数据分离的情况。 微软的ASP.NET MVC是pipe理这种情况的一个很好的工具,并且提供了一个非常清晰的MVC框架

但是我还没有find一篇单独的文章,在理论上与样本代码讨论差异。

如果我得到一篇文章讨论这三种devise模式(MVC,MVP和MVVM)与代码之间的区别,那将是非常好的。

我想了解一下这三种devise模式(MVC,MVP和MVVM)实现的3个类似的CRUD应用程序的源代码。 所以我可以通过代码,了解如何为这三个devise模式(MVC,MVP和MVVM)编写代码。

所以,如果有任何这样的文章存在,讨论如何代码看起来不同的这三种devise模式(MVC,MVP和MVVM),那么请redirect我的文章。

这应该是一个很好的先发。 实际上,你select的“平台”在你如何使用这些模式方面也起着重要的作用。 例如,MVVM自然适合WPF,而MVP可以很好地适用于Windows Forms。 ASP.Net MVC不言自明。

一些基本的差异可以写成:

MVC:

传统的MVC是哪里有一个

  1. 模型:充当数据的模型
  2. 查看:处理可以成为用户界面的用户的视图
  3. 控制器:控制模型和视图之间的交互,其中视图调用控制器来更新模型。 如果需要,视图可以调用多个控制器

MVP:

与传统的MVC类似,但Controller被Presenter所取代。 但是,与Controller不同,Presenter也负责改变视图。 这个观点通常不会叫主持人。

MVVM

这里的区别是View Model的存在。 这是观察者devise模式的一种实现,模型中的变化也在视图中由虚拟机表示。 例如:如果更改滑块,则不仅更新模型,而且更新显示在视图中的可能是文本的数据。 所以有一个双向的数据绑定。

来自链接的很好的解释: http : //geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

我们先来看MVC

input首先指向Controller,而不是视图。 该input可能来自用户与页面的交互,但也可能来自于将特定的urlinput到浏览器中。 在任何一种情况下,它都是一个控制器,可以启动一些function。

控制器和视图之间有多对一的关系。 这是因为单个控制器可能会根据正在执行的操作来select不同的视图。

从Controller到View有一个方向的箭头。 这是因为View对控制器没有任何了解或引用。

控制器确实传回了模型,所以视图和期望的模型之间有知识传递给它,而不是控制器服务它。

MVP – 模型视图演示者

现在让我们看看MVP模式。 它看起来非常类似于MVC,除了一些关键的区别:

input始于View,而不是Presenter。

视图和相关的Presenter之间有一对一的映射关系。

该视图保存对演示者的引用。 演示者也对从View触发的事件作出反应,所以它意识到与其关联的View。

演示者根据在模型上执行的请求操作更新视图,但视图不是模型感知的。

MVVM – 模型视图视图模型

所以在我们面前的MVC和MVP模式下,我们来看看MVVM模式,看看它有什么不同:

input始于视图,而不是视图模型。

虽然View保留对View Model的引用,但View Model没有关于View的信息。 这就是为什么在不同的视图和一个视图模型之间可能有一对多的映射,即使是跨越不同的技术。 例如,WPF视图和Silverlight视图可以共享相同的视图模型。

MVC,MVP,MVVM

MVC(旧的)

MPV(更低模块化,因为其低耦合性,Presenter是View和Model之间的中介)

MVVM(你已经有了VM和UI组件之间的双向绑定,所以它比MVP更自动) 在这里输入图像说明

另一个图像: 在这里输入图像说明