Spring:DTO和服务层

Posted

技术标签:

【中文标题】Spring:DTO和服务层【英文标题】:Spring: DTO and service layer 【发布时间】:2013-08-31 15:32:07 【问题描述】:

我正在使用当前层拓扑:

1) 道 2) 服务 3) 控制器(演示)

在我的一个控制器中,我收到了以下电话(来自客户):

public PlayerStatisticsDTO getPlayerStatistics(int playerId);

控制器现在应该将调用委托给服务层。

问题是,如果我创建一个类似的方法:

public PlayerStatisticsDTO getPlayerStatistics(int playerId);

在我的服务中,我实际上是让我的服务层知道 DTO 对象!

我认为这是一种不好的做法(或不是?)

所以我想出的另一个选择是创建一个新类:

public class PlayerStatistics ...

然后调用我的控制器:

 PlayerStatistics stats = this.service.getPlayerStatistics(playerID);
 return toDTO(stats);

这个解决方案的问题是我在我的项目中根本没有使用这个类,所以它看起来像是一个不必要的重复代码

【问题讨论】:

你有什么问题我不明白? 我不想让我的服务层熟悉我的 DTO 类 你想直接访问你的控制器,不是吗?你想以什么方式模块化? 【参考方案1】:

如果在请求的数据和被呈现的数据之间存在一对一的映射,那么在表示层中使用 DTO 对象并不是一个坏习惯。 如果您要在稍后阶段更改表示层,那么您可以创建一个包含表示属性的新 POJO,并将它们映射到服务层中。

【讨论】:

以上是关于Spring:DTO和服务层的主要内容,如果未能解决你的问题,请参考以下文章

WCF/服务层/存储库层:从服务层返回 DTO?并从返回的 DTO 在 Controller 中创建 ViewModel

我应该用Serializable标记spring mvc DTO吗? [复制]

服务层应该接受来自控制器的 DTO 或自定义请求对象吗?

根据 DTO、实体模型或其他东西验证服务层中的数据?

在 3 层架构中使用 DTO [关闭]

Spring cloud:服务调用-服务名访问