控制器 – >服务 – >库.
我需要将viewmodel映射到Entity,不确定哪个层是放入代码的正确层.
我知道它的控制器或服务,请让我知道我应该使用哪一个,如果可以,请告诉我原因.
谢谢.
解决方法
I need to map viewmodel to Entity,not sure which layer is the right one to put the code in.
控制器当然.服务和存储库层不知道视图模型的含义.他们只操纵领域模型.
所以在控制器内你使用.Map< TSource,TDest>调用在域模型和视图模型之间来回进行映射.但映射定义本身(.CreateMap< TSource,TDest> call)每AppDomain生命周期完成一次,理想情况下在Profile中.
因此,让我们在RESTful术语中考虑控制器操作中的几个典型工作流
GET(以RDBMS术语表示):
> controller查询服务层以检索域模型(在大多数情况下是聚合根)
> controller调用映射层将域模型映射到视图模型
> controller将视图模型传递给视图
PUT(以RDBMS术语插入):
> controller从视图中接收视图模型作为action参数
> controller将视图模型映射到域模型
> controller将域模型传递给服务层进行处理
> controller重定向到GET操作
DELETE(以RDBMS术语删除)
> controller接收id作为动作参数
> controller将id传递给服务层进行处理(删除)
> controller重定向到GET操作
POST(以RDBMS术语更新):
> controller从视图中接收视图模型作为action参数
> controller查询服务层以获取我们想要使用视图模型中包含的唯一ID更新的域模型
> controller仅更新检索到的域模型的属性,这些属性也存在于视图模型中.例如,域模型可能包含Username和IsAdmin属性,视图模型显然只包含Username属性.因此,我们保持域模型上的IsAdmin属性不变,并更新Username属性.在AutoMapper术语中,这转换为.Map< TSource,TDest>的以下void重载.方法:Mapper.Map< ADomain,viewmodel>(domainInstanceControllerRetrievedUsingTheId,viewmodelInstancePassedAsArgument);
> controller将更新的域模型传递给服务层进行处理(更新)
> controller重定向到GET操作
有了这4个工作流程,您就可以为CRUD世界做好准备了.
附: REST提醒:
Create = PUT Retrieve = GET Update = POST Delete = DELETE