我们仍然需要 DTO 吗?

发布: (2026年2月6日 GMT+8 03:21)
3 分钟阅读
原文: Dev.to

Source: Dev.to

封面图:我们仍然需要 DTO 吗?

什么是 DTO?

DTO(数据传输对象)是一种用于在层与层或系统之间传递数据的结构化对象。它通常用于:

  • 验证来自后端的数据。
  • 将后端响应转换为前端需要的形式。
  • 解耦前端和后端的模式,以避免破坏性更改。

在传统的 REST API 中,DTO 很常见,因为响应可能包含额外字段、嵌套结构或前端不需要的数据。

GraphQL 如何改变游戏规则

GraphQL 允许客户端请求恰好所需的数据。这带来了几个影响:

  • 细粒度查询 – 你在客户端查询中定义数据的形状,减少了将大响应映射到 DTO 的需求。
  • 强类型 – GraphQL 模式是强类型的。像 Apollo Codegen 或 GraphQL Code Generator 之类的工具可以自动为你的查询和变更生成 TypeScript 类型。
  • 灵活的前端演进 – 即使后端添加了额外字段,只要你没有查询它们,客户端也不会受到影响。DTO 不再充当防止破坏性更改的屏障。

何时仍可能需要 DTO

尽管 GraphQL 很强大,但在前端使用 DTO 仍有一些场景是有用的:

  • 业务逻辑转换 – 计算新字段、格式化日期,或将多个查询合并为一个适合 UI 的对象。
  • 验证或清理 – 在 UI 使用后端的可选或可空字段之前,强制执行更严格的规则。
  • 长期项目的解耦 – 在大型团队中,DTO 可以将前端代码与后端模式的更改隔离,尤其是当后端被多个客户端共享时。

何时可能不需要 DTO

  • 小型应用或 MVP – 映射到 DTO 的开销通常大于收益。
  • 类型安全的 GraphQL 客户端 – 如果你使用带有生成类型的 TypeScript,你的类型已经充当了“实时 DTO”。
  • 直接 UI 消费 – 如果你的组件可以直接消费 GraphQL 响应,添加 DTO 只会增加样板代码而收获不大。

旁注:仍有一些人倾向于将 DTO 作为整洁架构的一部分。你怎么看?

Back to Blog

相关文章

阅读更多 »

REST API(进行中)

markdown !Prasun Chakrabortyhttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws....

掌握前端性能优化的艺术

Introduction 作为一名前端软件工程师,我参与了各种具有挑战性的项目,我始终专注的一个领域是前端性能。A fas...