我创建了自己定制的大量架构,包括针对不同技术的 n 层。
目前正在使用 asp.net mvc 框架进行 n 层架构。问题是我在数据访问层有实体框架。由于实体将拥有所有关系元数据和导航属性,因此它变得更重。我觉得直接通过 mvc 视图公开这些实体是不明智的。
我更喜欢暴露自己定制的实体模型,而不是 mvc 视图,其中一个更轻量级。
但这也导致我将数据从原始实体转换为定制模型的开销。
例如,我有 Employee 实体,它是从实体框架的 edmx 文件生成的。它总共包含 20 个包含所有导航属性的字段。
现在在 mvc 中查看我只需要显示 2 个字段进行编辑。
那么我们是否需要公开原始实体来查看,还是需要创建这两个字段的 DTO/自定义模型,然后公开该视图?
我会使用视图模型。我已经学会了不要将域对象暴露给视图,而是将域对象映射到视图模型并将该视图模型返回到视图。
这是一个部分视图模型,如果您需要更多员工数据来创建/编辑或显示,您可能有更多属性:
public class EmployeeViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在我的控制器的操作方法中,它看起来像这样:
public ActionResult Edit(int id)
{
Employee employee = employeeRepository.GetById(id);
// Mapping can be done here by using something like Auto Mapper, but I am
// manually mapping it here for display purposes
EmployeeViewModel viewModel = new EmployeeViewModel();
viewModel.FirstName = employee.FirstName;
viewModel.LastName = employee.LastName;
return View(viewModel);
}
然后你的视图可能看起来像这样:
<td>First Name:</td>
<td>@Html.TextBoxFor(x => x.FirstName, new { maxlength = "15" })
@Html.ValidationMessageFor(x => x.FirstName)
</td>
我更喜欢拥有一个仅包含视图所需的员工值的视图模型。假设您的员工有 20 个属性,而您只需要更新 2 个字段,为什么还要将所有 20 个属性传递给视图呢?只使用您需要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)