Answers:
本质上,Model和View Model都是具有属性的简单类。
这些类的主要目的是为相应的观众(分别是控制器和视图)描述一个对象(“模型”)。
所以当你说你是完全正确的
据我了解,这是一种模型,其特定目的是与View进行交互
因此,虽然模型类实际上是与您的应用程序交互的域实体,但是视图模型是与视图交互的简单类。
希望能帮助到你 :)
更新:
Microsoft已经开发了Martin fowler的专用版本的Presentation Pattern,主要基于Model-View-Controller,并将其称为PF应用程序的Model-View-ViewModel(MVVM)。此模式针对的是现代UI开发平台,在该平台上,UI开发人员比传统开发人员更多地基于业务逻辑来满足不同的需求。在这里看看一些理论
用最简单的术语来说,我想以下几点:
模型:严格的外观和感觉就像您的数据模型。出于所有目的和目的,它仅是数据模型的类表示。它不了解您的视图或视图中的任何元素。也就是说,它不应包含将用于View的任何属性装饰器(即,Required,Length等)。
视图模型:充当视图和模型之间的数据绑定器,在许多情况下,它也是模型的包装。如果没有View,它将变得无用,因此通常无法像标准Model一样在多个View和Controller之间重用。
例如,您的模型可能具有以下属性,它们是数据源的直接表示:
public string FirstName { get; set; }
public string LastName { get; set; }
现在,由于您的视图模型已绑定到视图,因此它可能具有以下属性-将模型的名字字段和姓氏字段作为一个字符串连接在一起:
[Display(Name = "Customer Name")]
public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}
我发现本文是了解MVC应用程序中“域模型”和“视图模型”如何交互(特别是在绑定方面)的非常有用的资源。最好的是包括示例而不是抽象描述。
“自从MVC发布以来,我已经观察到关于如何最好地构建视图模型的许多困惑。有时这种困惑并非没有充分的理由,因为似乎没有关于最佳实践建议的大量信息。此外,还没有一个“千篇一律”的解决方案充当了灵丹妙药,在这篇文章中,我将描述一些已经出现的主要模式以及每种模式的利弊,请务必注意,其中许多模式解决现实世界问题的人们已经出现了。”
http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx
WikiPedia对Model vs.ModelView的描述比在SO答案中提供的更为完整:http : //en.wikipedia.org/wiki/Model_View_ViewModel
我引用:
模型:与经典MVC模式一样,模型指的是(a)表示真实状态内容的对象模型(面向对象的方法),或(b)表示该内容的数据访问层(数据-中心方法)。
视图:与传统的MVC模式一样,视图是指GUI显示的所有元素,例如按钮,窗口,图形和其他控件。
ViewModel:ViewModel是“视图的模型”,这意味着它是View的抽象,也用于View和Model之间的数据绑定。可以将其视为控制器的专用方面(在MVC模式中),它充当将数据模型信息转换为视图信息并将命令从视图传递到模型的数据绑定器/转换器。ViewModel公开公共属性,命令和抽象。ViewModel已被比喻为数据的概念状态,而不是Model中数据的实际状态。
有一个ViewModel的概念,但通常不与Asp.net MVC关联。MVC使用“模型视图控制器”模式,由该控制器处理交互,从模型中构建数据,然后将该数据传递给视图以进行显示。
ViewModels(和Model View ViewModel模式)通常与Silverlight和WPF相关联。Xaml有所不同,因为视图可以对ViewModels进行双向绑定,因此技术有所不同。例如,如果将文本框绑定到字段,则在您键入该文本框时,该字段的值将动态更新。由于网页是无状态的,因此在网页中这种交互实际上是不可能的。
两种模式的相似之处在于它们都试图将逻辑与显示分离。最常见的用途/原因是测试:您希望能够通过代码(通过测试框架)执行用户将通过用户界面调用的所有交互。