MVC View Model

时间:2015-04-22 14:21:06

标签: asp.net-mvc asp.net-mvc-4 model-view-controller

我只是对mvc视图模型一点帮助。 我看到每个人都使用像这样的mvc视图模型。但是我们正在编写更多代码。

 public class Artist
    {
        public int ArtistId { get; set; }
        public string NameSurname { get; set; }
        public int Age { get; set; }
    }   

public class ArtistViewModel
    {
        public int ArtistId { get; set; }
        public string NameSurname { get; set; }
        public int Age { get; set; }

        public string Whatever { get; set; }
        public int Iwant { get; set; }
    }

主类的副本。这是工作。好。 我们不喜欢这个

public class ArtistViewModel : Artist
    {
        public string Whatever { get; set; }
        public int Iwant { get; set; }
    }

OR

public class ArtistViewModel
    {
        public Artist Artist { get; set; }

        public string Whatever { get; set; }
        public int Iwant { get; set; }
    }

2 个答案:

答案 0 :(得分:0)

从域对象中创建单独的视图模型有很多原因

现在我能想到的很少。

=>视图模型是来自域/实体

的数据的表示(信息)

=>视图模型用于自定义视图的信息,您可能不允许/想要在此特定视图中显示/编辑实体的所有列。

=>您可能有许多视图模型填充了来自不同视图的同一域对象的数据。

=>您可以通过“查看模型”限制可以编辑/更新的内容。

如果您从真实实体继承ViewModel,黑客可以轻松发布真实实体所有属性的数据,即使您尝试通过View

进行限制

我的英语不是很好所以如果你不理解某些事情请告诉我,我会尽力清理它

答案 1 :(得分:0)

View Model的目的是限制我们发送给Web应用程序的数据。因此,我们不是将您所有的Domain类实体过滤到前端所需的属性。

在参考代码时,我看不到通过继承类来处理视图模型的任何差异。只有当它处理来自视图模型的数据时才会出现。

根据个人喜好,我会选择你的最后一个例子,

public class ArtistViewModel
{
    public Artist Artist { get; set; }    
    public string Whatever { get; set; }
    public int Iwant { get; set; }
}