【发布时间】:2017-05-09 18:34:23
【问题描述】:
在我的 WebApi 2 应用程序中,我有这个基本结构:
请求/响应模型 -> 领域(业务)模型 -> EF 数据模型
WebApi 控制器 -> 服务层 -> 模型层 -> EF 存储库层
MyModel.cs 文件
public class MyModel
{
public string Property1 { get; set; }
public string Property2 { get; set; }
public MyModel(){}
public MyModel(RedirectRequest request,RedirectResponse response)
{
Property1 = request.Property1;
Property2 = request.Property2;
/*... (more logic here)*/
}
}
Service.cs 文件(注入并在控制器中使用)
public void SaveMyModel(RedirectRequest request,RedirectResponse response)
{
var myModel = new Domain.MyModel(request,response);
/*...*/
var myDataModel = Mapper.Map<Data.Models.MyModel>(myModel);
_repository.AddOrUpdate(myDataModel);
}
public async Task<RedirectResponse> RedirectAndSaveRequest(RedirectRequest request)
{
var response = await Redirect(request);
SaveMyModel(redirect,response);
return response;
}
我正在讨论使用请求和响应模型构建/映射我的域/业务模型的正确方法,然后才能持久化。
MyModel 实例需要根据一些业务/逻辑规则来构建请求和响应模型,正如我所展示的。
我觉得将这些规则排除在域模型本身之外以防止它变得贫乏或构建额外的类或层(业务或映射层或类?)只是为了执行此基于逻辑的映射,这是不对的,因为它似乎矫枉过正。一位朋友告诉我它应该由 MVC 驱动(贫血/虚拟/POCO 模型在类似 DTO 的模式上表现得像 DTO) 我不完全同意。
这种方法的正确方法是什么?非常感谢大家的洞察力。
【问题讨论】:
标签: c# asp.net-mvc entity-framework asp.net-web-api domain-driven-design