我应该在哪里放置我的域模型来查看模型映射代码?

时间:2014-06-10 07:03:00

标签: c# asp.net asp.net-mvc asp.net-mvc-4

目前,我在控制器文件中使用私有静态方法将域模型映射到视图模型,反之亦然。如下所示:

public ActionResult Details(int personID)
{
    Person personDM = service.Get(personID);
    PersonViewModel personVM = MapDmToVm(personDM);
    return View(personVM);
}

private static PersonViewModel MapDmToVm(Person dm)
{
   PersonViewModel vm;
   // Map to VM
   return vm;
}

有没有其他标准方法可以做到这一点?

2 个答案:

答案 0 :(得分:19)

我更喜欢将映射逻辑放在视图模型(dto)类中,因为我们希望尽可能保持域模型的清晰,并且域模型可能会随着时间的推移而改变。

public class Person
{
    public string Name {get; set;}
}

public class PersonViewModel
{
    public string Text {get; set;}

    public static implicit operator PersonViewModel(Person dm)
    {
        var vm = new PersonViewModel { Text = dm.Name };
        return vm;
    }

    public static implicit operator Person(PersonViewModel vm)
    {
        var dm = new Person { Name = vm.Text };
        return dm;
    }
}

并在控制器中使用它而不进行显式转换。

Person dm = service.Get(id);
PersonViewModel vm = dm;

答案 1 :(得分:4)

由于映射并不总是微不足道,我认为将它分成除viewmodel之外的其他类可能更好。

这样每个班级都有自己的一个责任。您可能希望向域模型添加扩展方法,例如:

public static MyViewModel ToViewModel(this MyDomainModel model)
    {
      // mapping code goes here
    }

您也可以考虑使用automapper并从控制器调用它的Map方法。