在域层或数据访问层?
答案 0 :(得分:5)
DTO的主要动机是呈现为另一层(通常是表示层)定制的界面。例如,数据输入屏幕可能需要来自用户对象的一些数据位以及来自订单的一些位等。在这种情况下,域到DTO应该发生在表示层调用的层上,即通常一个“服务”层。
像Dozer这样的库可以自动完成域模型和DTO之间转换的繁重工作。
关键要点是DTO旨在从更丰富的域模型对象中抽象出数据(而非业务逻辑) - 因此,DTO应该尽早(在服务层)转换回域对象,以便其余的您的应用程序层可以使用更丰富的域对象(数据和业务逻辑)
答案 1 :(得分:2)
我不太喜欢DTO,但我说不要在数据层做。数据层处理模型对象及其持久性。为什么通过将DTO引入其中来将其与其他层结合起来?我将它们映射到其他地方,可能是在服务和层之间,只是在它们跨越创建它们的位置和它们被使用的位置之间的边界。
答案 2 :(得分:0)
将此内容放在MVC上下文中,如果同时具有控制器和服务层,则应将其放入控制器中。这将使DTO更加靠近视图层,并允许服务层仅与域对象一起播放,从而避免与其他模型的混淆。
DTO本身实际上是MVC模型(在此处解释:https://stackoverflow.com/a/1058186)。
下面是一个推荐的教程,该教程将控制器,服务层和DTO概念融合在一起(在使用Spring框架的Java中,但对于其他平台也很清楚): https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application