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

Sar*_*ana 10 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;
}
Run Code Online (Sandbox Code Playgroud)

有没有其他标准的方法来做到这一点?

Yul*_*dra 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在没有显式转换的控制器中使用它.

Person dm = service.Get(id);
PersonViewModel vm = dm;
Run Code Online (Sandbox Code Playgroud)

  • 唯一的问题是,我个人会忽略隐式运算符,因为它们可能会增加一些关于某个代码段是在域模型还是视图模型上运行的混淆.我已经定义了两个方法`FromModel`,`ToModel`. (8认同)
  • 您将如何构建由多个域模型组成的ViewModel? (6认同)