5

在域层还是数据访问层?

4

3 回答 3

6

DTO 的主要动机是呈现为另一层(通常是表示层)量身定制的界面。例如,数据输入屏幕可能需要来自用户对象的一些数据位以及来自订单等的一些位。在这种情况下,DTO 的域应该发生在表示层调用的层,即通常“服务”层。

有像Dozer这样的库可以自动完成在域模型和 DTO 之间转换的繁重工作。

关键是 DTO 旨在从更丰富的域模型对象中抽象出数据(而不是业务逻辑)——因此,DTO 应该尽早(在服务层)转换回域对象,以便您的应用程序层的其余部分可以使用更丰富的领域对象(数据和业务逻辑)

于 2010-03-13T20:08:41.707 回答
2

我不太喜欢 DTO,但我说不要在数据层这样做。数据层处理模型对象及其持久性。为什么要通过将 DTO 引入其中来将其与其他层耦合?我会将它们映射到其他地方,可能在服务层和 ui 层之间,就在它们跨越创建它们的位置和使用它们的位置之间的边界处。

于 2010-03-13T12:35:45.770 回答
1

把它放在 MVC 上下文中,如果你有控制器和服务层,你应该把它放在控制器中。这将使 DTO 更接近视图层,并允许服务层仅使用域对象,避免可能与其他模型混淆。

DTO 本身实际上就是 MVC 模型(此处解释:https ://stackoverflow.com/a/1058186 )。

下面是一个将控制器、服务层和 DTO 概念混合在一起的推荐教程(在 java 中使用 Spring 框架,但其他平台的概念也很清楚): https ://www.baeldung.com/entity-to-and -from-dto-for-a-java-spring-application

于 2019-03-23T00:00:53.487 回答