我应该在哪里进行转换:领域对象<->DTO?

5
在领域层或数据访问层中?
3个回答

6
DTO的主要动机是为了呈现一个适合另一层(通常是表现层)的接口。例如,数据输入屏幕可能需要从用户对象中获取一些数据位和来自订单等其他地方的一些数据位。在这种情况下,域到DTO应该发生在表现层调用的层,即通常为“服务”层。
有像Dozer这样的库存在,可以自动化在域模型和DTO之间进行转换的繁琐工作。
关键是DTO旨在将数据(而不是业务逻辑)抽象出更丰富的域模型对象 - 因此,DTO应尽早转换回域对象(在服务层),以便您的应用程序其余层可以使用更丰富的域对象(数据和业务逻辑)。

2

我不太喜欢使用DTO,但是我建议不要在数据层中使用。数据层处理的是模型对象及其持久性。为什么要将DTO与其他层耦合在一起呢?我会将它们映射到其他地方,可能是在服务层和UI层之间,就在它们被创建和使用的边界处。


1
将其放在MVC上下文中,如果您同时拥有控制器和服务层,则应将其放在控制器中。这将使DTO更靠近视图层,并允许服务层仅与域对象交互,避免可能与其他模型混淆的情况。
DTO本身实际上是MVC模型(在此解释:https://dev59.com/WnNA5IYBdhLWcg3wNa-T#1058186)。
以下是一个推荐的教程,将控制器、服务层和DTO概念结合在一起(使用Spring框架的Java语言编写,但该概念对于其他平台也很清晰):https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接