我应该把我的领域模型放在哪里以查看模型映射代码
本文关键字:模型 映射 代码 在哪里 我的 领域模型 我应该 | 更新日期: 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方法