java - 数据传输对象 DTO 在哪里构建

标签 java spring spring-mvc dto

尝试重构一些代码。我看到一些类创建 DTO 对象,这些对象在服务层中传递并稍后由 @RestController 返回。据我所知,最好只在 Controller 中构建数据传输对象并将它们传递给 View ,尤其是当我们使用类似 WrapperDTO<T> 的东西时。使用获取和设置值。当我们使用复杂对象或简单数据类型构建 WrapperDTO 时,可能存在差异。所有意见将不胜感激。

最佳答案

DTO 可用于在应用程序的不同层之间传输数据:DAO、服务、外观、 Controller 。根据我的经验,DTO 是一个自以为是的话题。

在我看来,转换越晚越好,不转换就更好了。通常,后者在应用程序边界。 DTO 不是免费的,它涉及映射及其支持。因此,当跨边界存在领域模型不匹配或模型技术不匹配时,DTO 将有意义。有关更多信息,您可以查看 LocalDTO article and the associated link .

如果我专注于服务 -> 外观 -> Controller 层:

  • 服务:他们从事服务工作,他们可能会互相调用以进行处理。如果您的领域模型在整个服务边界保持一致 service => facade现在将结果转换为 DTO 还为时过早。

  • Facades:它们可以编排服务并转换输入/输出。在我看来,这将是转换为 DTO 或从 DTO 转换的正确位置。但前提是需要即。因为您的域模型必须跨越此边界进行转换(过滤字段、聚合...)

  • 网关/ Controller :它们位于应用程序边界。他们的逻辑很简单,简化为边界逻辑。外观和 Controller 之间的关系通常是 one <-> one . ***

    合并外观和 Controller 通常很有意义


因此,在我看来,您的第一个提案更适合,例如。 UserController.... .最重要的是保持务实。

关于java - 数据传输对象 DTO 在哪里构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43319743/

相关文章:

java - 如何处理 XML-RPC 中的错误响应?

java - 使用 Maven 构建 .war 文件。缺少文件和目录

java - Spring Cron Job 什么时候会第一次执行?

java - 有关 Spring Framework 应用程序中 JDBC 逻辑的一些信息

java - 如何等待@Scheduled 直到上一个任务未完成?

java - 从另一个进程连接到嵌入式 AMQ

java - "(?i)"不适用于重音

spring - spring MVC 3.0中simpleFormcontroller的工作流程

java - 将复选框与服务结合使用

java - Spring data - 修改查询并发