我正在开发一个 MVC Web 应用程序。我只是想知道是 M、域模型还是 poco 类,或者它是精制和处理过的数据准备发送到 View 进行显示?
例如考虑一个数据库表:
Id, Name, Salary
要显示,我需要 4 列而不是 3 列:
Id, Name, Salary, Annual Salary (Salary * 12)
根据模式指南,我对 Model 类中的内容感到困惑,我会在 Controller 中执行
AnnualSalary=Salary*12
并将所有 4 条数据传递给查看,还是我的 Model 将返回 4 列?另一点是,如果我需要从具有这 4 列的其他表中添加地址,模型应该返回精炼和所需的数据还是在 Controller 中我应该查询 2 个不同的数据表并进一步选择并将数据传递给 View ?
最佳答案
ASP.NET MVC 上的一个好的做法是将模型与数据库和 View 模型分开。
在您的情况下,我们将有两个模型:EmployeeDTO 和 Employee。
public class EmployeeDTO
{
public int Id { get; set; }
public string Name { get; set; }
public int Salary { get; set; }
}
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public int Salary { get; set; }
public int AnnualSalary { get { return this.Salary * 12; } }
}
之后,在您的 Controller 上,您将 EmployeeDTO 映射到 Employee(读取操作),将 Employee 映射到 EmployeeDTO(创建/更新操作)。
例如,一个 Read 方法:
public ActionResult Read(int id)
{
EmployeeDTO employeeDTO = db.Employee.Find(id);
Employee employee = new Employee()
{
Id = employeeDTO.Id,
Name = employeeDTO.Name,
Salary = employeeDTO.Salary
};
return View(employee);
}
使用这种方法,您可以为 EmployeeDTO 实现 DataAnnotations,它不会自动应用于 Employee(因此适用于您的 View ),反之亦然。
在您的情况下,您可以添加一个不影响数据库架构的新属性。
希望能帮助到你。