什么是模型和视图模型的差异?

ama*_*eur 2 asp.net asp.net-mvc models viewmodel asp.net-mvc-4

在一个mvc项目中,有人可以向我解释模型和视图模型之间的区别吗?

我的理解是视图模型重新呈现了视图数据,例如.cshml,但模型表示部分视图的数据.这是否正确.我已经看到在不同情况下使用的名称使我感到困惑,因此寻找方向.

Fin*_*las 5

模特是你的领域.例如,我们可能有一个客户模型.我们可以在我们的域中使用此客户.我们可以为这个客户下订单.我们可以更新客户的联系方式,等等.

// Domain object, encapsulates state.
class Customer 
{   
   public void PlaceOrder() {...}
   public void UpdateContactDetails() { ... }
}
Run Code Online (Sandbox Code Playgroud)

视图模型是一种以简单方式呈现数据的方式.例如,我们可能有一个客户视图模型.这将是一个简单的DTO(数据传输对象),它允许我们将客户公开给视图.通常,视图模型是从模型创建的 - 通常会进行某种形式的转换.

// DTO - exposes state - no domain logic
class CustomerViewModel
{
    public string Name { get; set; }
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用视图模型而不是在视图中使用域对象的好处是,您不必公开域的内部以简化表示逻辑.我应该补充说,视图模型是一种控制模型绑定的方法,例如,如果您公开数据库记录,您可能不希望整个记录可绑定.使用视图模型意味着仅绑定模型上的那些参数.因此,从安全角度来看,使用视图模型非常重要.这里的替代方案是使用白名单来控制在模型绑定过程中使用的内容 - 这自然是繁琐且容易出错的.

就ASP.NET MVC而言 - 单词模型在某种程度上可以互换使用.在"真实世界"项目中,您的域可能很复杂,并且不会驻留在Web App中,您可能会包含其他一些依赖项.因此,您将使用的"模型"将是"视图模型".