模型作为ViewModel的成员

时间:2012-06-15 01:54:54

标签: asp.net-mvc mvvm viewmodel

我正在尝试更深入地理解ViewModel,并且我在MVC中阅读了许多关于ViewModel的文章和博客。在一些文章中,据说不应该从ViewModel引用模型,但在其他一些文章中,建议使用模型作为viewmodel的成员。

让我们举一个例子,我必须根据模型创建一个ViewModel。我有可能以两种方式做到这一点:

1

 public class Car
{
       public int Year {get;set;}
       public string  Make {get;set;}
       //more properties......
}

public class CarViewModel
{
  public CarViewModel(Car model)
  {
    Model = model;
  }

  public Car Model { get; set; }
 //additional view model specific properties
}

或2。

public class Car
{
       public int Year {get;set;}
       public string  Make {get;set;}
       //more Car properties......
}

public class CarViewModel
{
       public int Year {get;set;}
       public string  Make {get;set;}
       //more Car properties......

     //additional view model specific properties
}

我只是想知道哪一个是创建ViewModel的正确方法。或者还有其他方法可以完全这样做吗?

1 个答案:

答案 0 :(得分:2)

Car模型是数据持久性时,我会选择第二种方法,说它是由Entity Framework创建的类。在这种情况下,我不希望这些模型在控制器和视图中浮动。我将创建一个与您所做的相同的视图模型,并使用AutoMapper之类的工具来映射属性。

在第一种方法中,视图模型充当包装器。这可以在您希望在与该模型绑定的视图中显示其他信息的情况下使用。假设您必须添加几个UI字段,绝对不应该在Car模型中执行此操作,并且您必须创建一个包装Car模型和其他UI字段的视图模型。

基本上,View Models可以帮助您保持业务模型不受UI内容的影响,并有助于避免在视图和控制器中浮动数据库的模型。因此,您可以根据场景使用两种方法。

希望这能回答你的问题。