MVVM在ASP.NET MVC 4 Web应用程序中扮演什么角色?

Kru*_*lur 11 asp.net-mvc web-applications mvvm knockout.js

当我读"ASP.NET MVC 4"这本书时,我想知道MVVM.我开始谷歌搜索,无法找到任何关于使用MVVM开发Web应用程序的书籍,所以我必须在这里遗漏一些信息.

据我所知,MVVM通过knockout.js和其他框架在客户端的Web应用程序中使用.但是,如果我要开发Windows Phone应用程序,我可以直接使用MVVM而不使用MVC.这是否意味着,MVVM /数据绑定的概念不适用于客户端 - 服务器Web应用程序?

Chr*_*att 15

MVVM实际上是一种子模式.那里并没有真正的"MVVM"Web应用程序框架.它们都是MVC,如果你想要的话,你几乎只需要一个视图模型.

特别是在ASP.NET MVC中,您只需创建一个类,通常使用[Model Name]ViewModel或者形式的名称 [Model Name]VM.该类将只包含您需要使用的模型中的属性以及任何额外的内容,这些内容对于实际的数据库支持的模型(如SelectLists等)没有意义.

在您的操作中,您只需将此视图模型的实例传递给视图而不是模型:

return View(viewModelInstance);
Run Code Online (Sandbox Code Playgroud)

当然,请确保您的观点接受:

@model Namespace.To.MyViewModel
Run Code Online (Sandbox Code Playgroud)

唯一稍微复杂的部分是将视图模型连接到模型(即,从视图模型/模型获取数据.您可以通过显式映射属性来手动执行此操作,或者您可以使用类似AutoMapper的内容.

  • 谷歌的 Angular ,淘汰赛是基于 jquery 的 MVVM 框架 (2认同)
  • 抱歉,我应该更具体一些。我的意思是网络应用程序框架。我不知道有任何纯 MVVM Web 堆栈。 (2认同)

Rac*_*hel 6

MVVM 是 WPF/Silverlight 开发的标准设计模式,不应与 ASP.Net 开发的 MVC 混淆。

两者听起来可能相似并共享一些共同点,但它们是两种不同的设计模式。

根据我对 Knockout.js 的了解,它旨在创建类似于您在 WPF/Silverlight 开发中使用的“数据绑定”,这就是 MVVM 设计模式适用于那里的原因。

引用我关于 MVVM 和 MVC 之间差异的另一个答案

MVVM 中,您的代码类 ( ViewModels) 是您的应用程序,而您Views的只是一个非常用户友好的界面,它位于应用程序代码之上并允许用户与其交互。这意味着ViewModels它们的工作量很大,因为它们是您的应用程序,负责从应用程序流到业务逻辑的所有内容。

使用MVC,您Views就是您的应用程序,而您Controller处理应用程序流程。应用程序逻辑通常在 中找到ViewModels,它被认为是 MVC 中 M 的一部分(旁注:MVC 中的 M 不能被视为与 MVVM 中的 M 相同,因为 MVC 的 M 层包含比 MVVM 的 M 层更多的功能)。给用户一个屏幕 ( View),他们与之交互,然后向 提交一些内容Controller,然后Controller决定谁对数据执行什么操作,并向用户返回一个新的视图。

  • 我发现“另一个答案”中的引用非常简单,而且可以说是不准确的。该引用中的“应用程序”暗示业务逻辑,如果是这样,您不要将业务逻辑放在 MVVM 中的 VM 中,也不要将 M 放在 MVC 中。作者完全错过了 MVVM 中 V 的全部要点,您通常会限制隐藏代码的数量,因此它们几乎不是“非常友好的用户界面”。VM 的工作量并不大。如前所述,您限制了放置在那里的业务逻辑的数量 (7认同)

ahm*_*met 5

MVC 是一种单向数据绑定系统。

填写您的中号在奥德尔Ç ontroller,然后把它传给V IEW。


MVVM 是一种双向数据绑定。

填写您的中号奥德尔,用它在V IEW,当V IEW状态的变化,您的中号奥德尔自动更新(反之亦然)