我应该把我的领域模型放在哪里以查看模型映射代码

本文关键字:模型 映射 代码 在哪里 我的 领域模型 我应该 | 更新日期: 2023-09-27 18:08:06

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

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;
}

还有其他标准的方法吗?

我应该把我的领域模型放在哪里以查看模型映射代码

我更喜欢将映射逻辑放在视图模型(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;

由于映射并不总是微不足道的,我认为最好将其分离到视图模型以外的另一个类中。

这样每个类都有自己的单一职责。您可能想要向您的域模型添加一个扩展方法,类似于:

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

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