【发布时间】:2013-09-26 06:56:30
【问题描述】:
我正在使用通过域层抽象的 MVC 模式。我可以将域对象转换为其等效的 DTO 并将其发送到顶层(即控制器并最终发送到视图)。现在如何做相反的事情?我将如何以及在哪里构造实际的 DTO 对象并将其传递给控制器?
【问题讨论】:
标签: model-view-controller repository dto
我正在使用通过域层抽象的 MVC 模式。我可以将域对象转换为其等效的 DTO 并将其发送到顶层(即控制器并最终发送到视图)。现在如何做相反的事情?我将如何以及在哪里构造实际的 DTO 对象并将其传递给控制器?
【问题讨论】:
标签: model-view-controller repository dto
我发现最好的方法是使用 DTO 服务层。这将是控制器(或其他任何东西)可以调用以检索和转换 DTO 的函数集合。
我还建议在这一层中进行域对象到 DTO 的映射(以及相反的映射),它将所有 DTO 相关的逻辑都保留在一层中。
下面是一个DTO服务层函数的例子:
public CustomerDto GetCustomer(Guid customerId) {
var roService = new RoService<Customer>(new Repository<Customer>(_dbContextFactory));
return _mapper.ToCustomerDto(roService.Get(customerId));
}
这将通过其 ID 检索客户实体。实体被传递给映射器对象,该对象将其转换为 CustomerDto 以便返回。
注意我使用 AutoMapper 将我的域对象转换为 DTO。
【讨论】:
public CustomerDto ToCustomerDto(Customer item) { return Mapper.Map<Customer, CustomerDto>(item); } 这将返回一个新的 CustomerDto,其中包含您定义的所有映射字段。正如我所说,我个人使用 AutoMapper。我希望这会有所帮助。