MVC和MVVM有什么区别?

MVC和MVVM有什么区别?

标准的“模型视图控制器”模式与Microsoft的模型/视图/ ViewModel模式之间是否存在差异?



慕莱坞森
浏览 1449回答 3
3回答

白板的微信

我认为理解这些首字母缩略词的最简单方法是暂时忘掉它们。相反,考虑一下它们所源自的软件。它实际上归结为早期网络和桌面之间的差异。第一个首字母缩写词MVC起源于网络。(是的,它可能曾经存在过,但网络是如何向大量的Web开发人员推广的。)想想数据库,HTML页面和代码。让我们稍微改进一下以获得MVC:对于»database«,让我们假设数据库加接口代码。对于»HTML pages«,我们假设HTML模板和模板处理代码。对于»code inbetween«,让我们假设代码将用户点击映射到可能影响数据库的操作,肯定会导致显示另一个视图。就是这样,至少为了这个比较的目的。让我们保留这个网络内容的一个特征,不像现在这样,但是十年前它存在,当时JavaScript是一个卑微,卑鄙的烦恼,真正的程序员很好地避开了:HTML页面本质上是愚蠢和被动的。浏览器是瘦客户端,或者如果你愿意的话,是一个糟糕的客户端。浏览器中没有智能。整页重新加载规则。每次都会重新生成»view«。让我们记住,这种网络方式虽然风靡一时,但与桌面相比却是非常落后的。如果您愿意,桌面应用程序是胖客户端或富客户端。(甚至像Microsoft Word这样的程序也可以被认为是某种客户端,文档的客户端。)他们是充满智慧的客户,充满了关于他们数据的知识。他们是有状态的。它们缓存了他们在内存中处理的数据。没有这样的废话作为整页重新加载。这种丰富的桌面方式可能是第二个缩写词起源于MVVM的地方。不要被字母所愚弄,因为C的遗漏仍然存在。他们需要。什么都没有被删除。我们只添加一件事:有状态,缓存在客户端上的数据(以及处理该数据的智能)。该数据,实际上是客户端上的缓存,现在称为“ViewModel”。它允许丰富的交互性。就是这样。MVC =模型,控制器,视图=基本上是单向通信=差的交互性MVVM =模型,控制器,缓存,视图=双向通信=丰富的交互性我们可以看到,使用Flash,Silverlight,以及 - 最重要的是 - JavaScript,网络已经接受了MVVM。浏览器不能再被合法地称为瘦客户端。看看他们的可编程性。看看他们的记忆消耗。查看现代网页上的所有Javascript交互性。就个人而言,我发现这个理论和首字母缩略词业务通过查看它在具体现实中所指的内容更容易理解。抽象概念是有用的,特别是在具体问题上展示时,所以理解可能会完整。

紫衣仙女

MVVM 模型 - 视图ViewModel类似于MVC,模型 - 视图控制器控制器将替换为ViewModel。ViewModel位于UI层下方。ViewModel公开视图所需的数据和命令对象。您可以将此视为一个容器对象,该视图用于获取其数据和操作。ViewModel从模型中提取数据。Russel East做了一个博客,详细讨论了 为什么MVVM与MVC不同
打开App,查看更多内容
随时随地看视频慕课网APP