首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MVC、MVP和MVVM设计模式在编码c#方面有什么不同?

MVC、MVP和MVVM设计模式在编码c#方面有什么不同?
EN

Stack Overflow用户
提问于 2013-10-18 15:55:49
回答 6查看 167.8K关注 0票数 232

如果我们用“MVC、MVP和MVVM设计模式之间的差异”这个短语在谷歌上搜索,我们可能会得到一些讨论the difference between MVC MVP & MVVM design pattern theoretically like的网址

MVP

在无法通过"dataContext“进行绑定的情况下使用。Windows窗体就是一个很好的例子。为了将视图与模型分开,需要一个presenter。由于视图不能直接绑定到presenter,因此必须通过接口(IView)将信息传递给视图。

MVVM

在可以通过"dataContext“绑定的情况下使用。为什么?删除了每个视图的各种IView接口,这意味着需要维护的代码更少。一些使用Knockout的MVVM可以包含WPF和javascript项目的例子。

MVC

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

但我还没有找到一篇从理论上讨论这一差异的文章和示例代码。

如果我能有一篇文章讨论这3种设计模式(MVC、MVP和MVVM)和代码之间的区别,那就太好了。

我想得到这三种设计模式(MVC、MVP和MVVM)实现的三个类似的CRUD应用程序的源代码。这样我就可以浏览代码,了解应该如何为这三种设计模式(MVC、MVP和MVVM)编写代码。

因此,如果有任何讨论这3种设计模式(MVC、MVP和MVVM)的代码看起来不同的文章,请将我重定向到该文章。

EN

回答 6

Stack Overflow用户

发布于 2016-04-17 04:12:13

一些基本的区别可以简而言之写成:

MVC:

传统的MVC是有一个

  1. 模型:作为data

视图的模型:处理对用户的视图,可以是UI

  1. :控制模型和视图之间的交互,视图调用控制器来更新模型。如果需要,View可以调用多个控制器。

MVP:

类似于传统的MVC,但Controller被Presenter取代。但与Controller不同的是,Presenter还负责更改视图。视图通常不调用演示者。

MVVM

这里的区别在于View Model的存在。它是观察者设计模式的一种实现,其中模型中的更改也由VM在视图中表示。例如:如果更改滑块,不仅模型会更新,视图中显示的可能是文本的数据也会更新。所以有一个双向的数据绑定。

票数 120
EN

Stack Overflow用户

发布于 2017-08-24 08:04:15

MVC、MVP、MVP

MVC (旧的)

MVP (更模块化,因为它的低耦合性。演示者是视图和模型之间的中介者)

MVVM (您已经在VM和UI组件之间进行了双向绑定,因此它比MVP更自动化)

另一张图片:

票数 59
EN

Stack Overflow用户

发布于 2016-08-31 15:37:59

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

让我们先来看看MVC

输入首先指向控制器,而不是视图。该输入可能来自与页面交互的用户,但也可能来自简单地在浏览器中输入特定的url。在任何一种情况下,它都是一个与之交互的控制器,用于启动某些功能。

在控制器和视图之间存在多对一的关系。这是因为单个控制器可能会根据正在执行的操作选择要呈现的不同视图。

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

控制器传递回模型,因此在视图和传递给它的预期模型之间有知识,但不是提供它的控制器。

MVP -模型视图Presenter

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

输入以视图开始,而不是演示者。

视图和关联的演示者之间存在一对一的映射。

视图包含对演示者的引用。演示者还会对从视图触发的事件做出反应,因此它知道与之关联的视图。

演示者根据它在模型上执行的请求操作更新视图,但视图不能识别模型。

-模型视图视图模型MVVM

因此,MVC和MVP模式摆在我们面前,让我们来看看MVVM模式,看看它有什么不同:

输入从View开始,而不是View Model。

虽然视图包含对视图模型的引用,但视图模型没有关于视图的信息。这就是为什么可以在各种视图和一个视图模型…之间建立一对多映射的原因即使是跨技术的。例如,WPF视图和Silverlight视图可以共享同一视图模型。

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19444431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档