我有一个Asp.net MVC5应用程序,结构如下:
核心
基础设施
用户界面
它通过工作单元和一个注入了统一的通用存储库来工作。
我的问题是:
我严格地试图在UI视图中使用ViewModels,我应该将映射域模型<=> ViewModel的逻辑放在哪里?
我应该在Controller中这样做,还是应该将映射逻辑放入ViewModel本身并创建方法ViewModel.FromDomainObject(DomainObject domainObject)或ViewModel.ToDomainObject(ViewModel viewModel)等等?
发布于 2015-12-30 02:20:34
继续将实现映射到控制器之外。相反,在控制器中调用负责映射的东西。
public ActionResult FetchSomething()
{
var thingMapper = new ThingMapper();
var viewModel = thingMapper.ToViewModel(service.FetchSomething());
return View(viewModel);
}当然,如果您的ViewModel只是一两个属性,则可以跳过映射器。
public ActionResult FetchSomething()
{
var thing = service.FetchSomething();
var viewModel = new ThingViewModel { Prop1 = thing.Prop1 };
return View(viewModel);
}幸运的是,AutoMapper可以帮助您在不编写自定义映射器的情况下映射对象。
我不会将映射实现存储在ViewModels本身中。当一个ViewModel可以表示来自多个源的数据时,这会变得很尴尬。对我的口味来说,它也把责任混为一谈。
https://softwareengineering.stackexchange.com/questions/306116
复制相似问题