ViewModel!=域模型

时间:2014-08-23 05:02:13

标签: asp.net-mvc model viewmodel

在浏览mvc中的最佳实践时,我发现DomainModel!= ViewModel

所以,如果我要求显示所有员工的详细信息,如姓名,年龄,地址。 我有一个EmployeeModel类即域类,它具有Id,Name,Age,Addresss,Department等属性。在我的视图中,我只需要显示名称,年龄,地址,所以我创建一个特定于EmployeeViewModel的视图,其中包含名称,年龄,地址等支持,并将其映射到带有者自动控制器或控制器中的某些东西的EmployeeModel? 或者我可以在EmployeeViewModel中重用现有的EmployeeModel 即在EmployeeViewModel中创建一个EmployeeModel属性? 什么是最佳做法?

public class EmployeeModel
{ 
 public int EmployeeId {get ; set} 

public string Name{get ; set}

public string Age{get ; set}

public string Department{get ; set}

}

那么我会像这样创建一个ViewModel吗?

public class EmployeeViewModel
{  

public string Name{get ; set}

public string Age{get ; set}

public string Department{get ; set}

}

或者我会创建一个这样的viewmodel吗?

  public class EmployeeViewModel
    {  

     public EmployeeModel employeeModel {get; set;}

    }

由于

2 个答案:

答案 0 :(得分:2)

如果您的视图很复杂,请创建与您的域/实体模型分开的视图模型。

不要试图将您的域模型封装在视图模型中;我发送的具有视图模型的ups是视图的绑定和逻辑封装是微不足道的,并且针对您的视图进行了定制。包含域模型的那一刻,事情变得复杂。

哦,查找自动播放器。这将消除一些(不是全部)映射疼痛。

答案 1 :(得分:0)

我会使用ViewModel中的属性。它使您的模型更清洁。您可以在ViewModel中处理验证。它还可以使ViewModel清除不必要的属性和关系(在某些情况下)。

public class EmployeeViewModel
{  

[Requried]
public string Name{get ; set}

public string Age{get ; set}

public string Department{get ; set}

}