news 2026/4/28 2:36:23

微服务下 DTO 设计核心原则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微服务下 DTO 设计核心原则

文章目录

  • 前言
    • 一、微服务调用链
    • 二、推荐命名
      • 请求对象
    • 三、Feign 接口示例
      • stock-api 模块
      • 请求 DTO
      • 返回 DTO
    • 四、微服务 DTO 不要放在哪?
    • 五、不要直接暴露 Entity / DO
    • 六、DTO 要分“入参”和“出参”
    • 七、统一返回结构
    • 八、版本兼容很重要
    • 九、订单服务调用用户服务示例
    • 十、推荐目录结构
    • 一句话总结

前言

微服务下 DTO 设计核心原则:

对外稳定,对内隔离,禁止直接复用数据库对象。


一、微服务调用链

order-service ↓ Feign / RPC user-service stock-service coupon-service pay-service

服务之间传的对象一般就是:

RequestDTO / ResponseDTO

二、推荐命名

请求对象

CreateOrderRequestDeductStockRequestUserQueryRequest

或者:

CreateOrderDTODeductStockDTO

我更推荐微服务接口用:

XXXRequest / XXXResponse

因为语义更清楚。


三、Feign 接口示例

stock-api 模块

@FeignClient(name="stock-service")publicinterfaceStockClient{@PostMapping("/api/stock/deduct")StockDeductResponsededuct(@RequestBodyStockDeductRequestrequest);}

请求 DTO

publicclassStockDeductRequest{privateLongskuId;privateIntegercount;privateStringrequestId;}

返回 DTO

publicclassStockDeductResponse{privateBooleansuccess;privateStringcode;privateStringmessage;}

四、微服务 DTO 不要放在哪?

不要放在:

order-service 内部 domain 包 stock-service 内部 entity 包

否则其他服务依赖会很乱。

推荐建独立 API 包:

stock-api ├── client │ └── StockClient.java ├── dto │ ├── StockDeductRequest.java │ └── StockDeductResponse.java

然后:

order-service 依赖 stock-api stock-service 实现 stock-api

五、不要直接暴露 Entity / DO

错误示例:

@PostMapping("/user/get")UserDOgetUser(@RequestBodyUserDOuser);

问题:

数据库结构泄露 字段一改,调用方全炸 可能暴露敏感字段 服务边界不清晰

正确:

UserQueryRequestUserResponse

六、DTO 要分“入参”和“出参”

不要一个对象到处复用。

错误:

UserDTO同时用于创建、修改、查询、返回

正确:

UserCreateRequestUserUpdateRequestUserQueryRequestUserResponse

因为不同场景字段不一样:

创建需要 password 返回不能有 password 修改可能只传 nickname 查询可能只传 userId/mobile

七、统一返回结构

微服务之间建议统一响应:

publicclassRpcResult<T>{privatebooleansuccess;privateStringcode;privateStringmessage;privateTdata;}

例如:

RpcResult<UserResponse>getUser(UserQueryRequestrequest);

八、版本兼容很重要

DTO 一旦被其他服务依赖,就不能随便改。

推荐规则:

新增字段:可以 删除字段:谨慎 改字段类型:禁止 改字段含义:禁止 字段重命名:基本等于破坏兼容

如果必须大改:

/api/v2/user/query UserQueryV2Request UserV2Response

九、订单服务调用用户服务示例

@ServicepublicclassOrderService{privatefinalUserClientuserClient;publicOrderService(UserClientuserClient){this.userClient=userClient;}publicvoidcreateOrder(LonguserId){RpcResult<UserResponse>result=userClient.getUser(newUserQueryRequest(userId));if(!result.isSuccess()){thrownewRuntimeException("查询用户失败");}UserResponseuser=result.getData();// 创建订单逻辑}}

十、推荐目录结构

user-api ├── client │ └── UserClient.java ├── request │ └── UserQueryRequest.java ├── response │ └── UserResponse.java └── result └── RpcResult.java user-service ├── controller ├── service ├── domain ├── mapper └── converter order-service ├── controller ├── service └── client

一句话总结

微服务 DTO 是服务契约,不是数据库对象;Feign/RPC 接口要用独立 API 模块维护 Request/Response,并注意版本兼容。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 2:28:21

AKS+OpenAI+Terraform:云原生AI应用基础设施一键部署实践

1. 项目概述&#xff1a;当Kubernetes遇见大语言模型最近在搞一个内部AI应用的原型&#xff0c;需要快速在云上部署一个能跑大语言模型推理的服务。需求很明确&#xff1a;要能弹性伸缩、要能方便地管理模型版本、还要能跟现有的Kubernetes生态无缝集成。在Azure上转了一圈&…

作者头像 李华
网站建设 2026/4/28 2:27:14

从零部署自主AI平台Hera:构建具备记忆与行动能力的智能体

1. 项目概述&#xff1a;一个能“思考”和“行动”的自主AI平台 如果你对AI的印象还停留在“一问一答”的聊天机器人&#xff0c;那么Hera可能会颠覆你的认知。这不是一个简单的ChatGPT套壳应用&#xff0c;而是一个被设计成具备“人工生命”雏形的自主智能体平台。它的核心目…

作者头像 李华
网站建设 2026/4/28 2:26:26

EDAN工具链:HPC内存性能分析与优化新方法

1. EDAN工具链概述&#xff1a;HPC内存性能分析新范式在当代高性能计算&#xff08;HPC&#xff09;领域&#xff0c;内存墙问题已成为制约系统性能提升的主要瓶颈。传统分析方法如gem5仿真虽然精确&#xff0c;但耗时长达24小时以上&#xff0c;且难以直观呈现程序内在的内存访…

作者头像 李华
网站建设 2026/4/28 2:20:22

Awoo Installer:让Switch游戏安装变得简单高效的3个关键决策

Awoo Installer&#xff1a;让Switch游戏安装变得简单高效的3个关键决策 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装的繁…

作者头像 李华
网站建设 2026/4/28 2:18:19

Java虚拟机精讲【1.9】

2.5 生成字节码 成功经历过词法分析、语法分析和语义分析等步骤之后,所解析出来的语法树已经非常完善了, 那么 javac 编译器最后的任务就是调用 com.sun.tools.javac.jvm.Gen 类将这棵语法树编译为 Java 字节码文件。其实所谓编译字节码,无非就是将符合 Java 语法规范的 Ja…

作者头像 李华
网站建设 2026/4/28 2:18:19

基于YOLOv5的手写签名检测模型开发与实践

1. 项目概述在数字化文档处理流程中&#xff0c;手写签名识别一直是个有趣且实用的技术挑战。这个开源项目提供了一个专门用于检测文档中手写签名的深度学习模型&#xff0c;能够自动定位扫描文档或电子文件中的签名区域。不同于传统的OCR技术&#xff0c;签名检测更关注于区域…

作者头像 李华