尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
VO、DO、DTO 到底怎么分?一篇讲透后端分层的数据对象
关键词VO、DO、DTO、Java 分层架构、领域模型、数据传输对象刚入行的时候最怕看到项目里一堆XxxVO、XxxDO、XxxDTO飞来飞去。明明都是装数据的类为什么还要分这么多种能不能干脆统一用一个Xxx搞定答案先放这短期能跑长期必乱。这篇文章就把这三个O讲清楚顺便给你一套能直接抄的项目分层范本。一、先给结论它们各管一段对象全称中文活动区域关注点DOData Object / Domain Object数据对象 / 领域对象数据库 ↔ DAO 层表结构、持久化DTOData Transfer Object数据传输对象服务层 ↔ 控制层跨进程/跨层精简、安全、按需组装VOView Object / Value Object视图对象控制层 ↔ 前端页面展示、格式化一句话记忆DO 贴近数据库DTO 贴近传输VO 贴近屏幕。二、DO和数据库表同呼吸共命运DO 是数据持久层的核心字段基本和数据库表一一对应。它的唯一职责就是忠实地映射表结构。// 用户表 user 对应的 DOTableName(user)publicclassUserDO{privateLongid;privateStringusername;privateStringpassword;// 注意敏感字段privateStringphone;privateIntegerstatus;privateDatecreateTime;privateDateupdateTime;// getter / setter 省略}要点字段名、类型尽量和表保持一致别在这层做展示优化。密码、盐值这类敏感字段可以存在于 DO但绝不能一路传到前端。在 MyBatis / JPA 的 Entity 里DO 和 Entity 经常是同一类东西的不同叫法。三、DTO跨层传输的瘦身快递盒当 Controller 要调 Service或者微服务之间要传数据你不会把整个 DO 丢过去里面还带着密码呢。DTO 就是为了按需组装、减少冗余、屏蔽敏感字段而存在的。// 创建用户的请求 DTOpublicclassUserCreateDTO{NotBlank(message用户名不能为空)privateStringusername;Pattern(regexp^1[3-9]\\d{9}$,message手机号格式不正确)privateStringphone;// 没有 password、没有 id、没有时间戳}// 服务间返回的 DTO聚合了用户和订单概要publicclassUserProfileDTO{privateLonguserId;privateStringnickname;privateIntegerorderCount;privateBigDecimaltotalSpent;}要点DTO 里通常带参数校验注解NotBlank、Pattern它是入参契约。一个 DO 可以拆成多个 DTO列表页 DTO、详情页 DTO反向也可以多表聚合成一个 DTO。跨服务调用时DTO 就是接口的对外承诺改字段要慎重涉及兼容性。四、VO只给前端看得到的东西VO 是最后一道关专门给前端页面用。它做的是格式化 裁剪日期转成字符串、枚举转成中文、数字加上单位、把嵌套结构摊平。// 前端用户列表展示用的 VOpublicclassUserListVO{privateLongid;privateStringusername;privateStringphoneMasked;// 138****8888privateStringstatusText;// 1 - 正常0 - 禁用privateStringcreateTimeText;// 2026-07-17 10:30}// 转换过程典型在 Controller 或 Converter 里UserListVOvonewUserListVO();vo.setId(do.getId());vo.setUsername(do.getUsername());vo.setPhoneMasked(maskPhone(do.getPhone()));vo.setStatusText(do.getStatus()1?正常:禁用);vo.setCreateTimeText(format(do.getCreateTime()));要点VO 里不要出现业务计算逻辑只做展示所需的数据搬运。前端要什么格式VO 就长什么样——它是以页面为中心的。敏感字段在 VO 层面必须彻底消失。五、三者怎么串起来一张流程图看明白[ 数据库 ] │ (MyBatis 查询) ▼ UserDO ──► Service 层做业务处理 │ │ (DO → DTO跨层/跨服务传) ▼ UserDTO ──► Controller 接收 / 转发 │ │ (DTO/DO → VO按页面需求组装) ▼ UserVO ──► 返回给前端渲染简化记忆DO 进来DTO 跑腿VO 出去。六、新手最容易踩的 3 个坑一个类打天下前端要改个字段展示你直接改了 DO结果把数据库映射也搞崩了。分层就是为了改展示不动存储。DTO 当 VO 用把带密码的 DTO 直接序列化返回前端——这是真实发生过的严重事故。过度设计只有 3 张表的小项目硬凑 VO/DO/DTO 三套反而拖慢开发。中小项目可以DO VO两件套起步等业务复杂了再补 DTO。七、什么时候该用什么时候可以省项目规模推荐组合说明内部小工具 / DemoEntity 直接用怎么快怎么来普通单体后台DO VOController 直接转 VO 返回标准分层后台DO DTO VOService 出 DTOController 转 VO微服务DTO强约束 VO跨服务必须用 DTO 当契约八、总结DO忠于数据库DTO忠于传输VO忠于页面。分层的本质不是多写几个类而是隔离变化存储结构、接口契约、展示需求三者各自演进互不干扰。别为了分层而分层但一旦项目超过玩具级这套三件套就是你的安全带。如果你现在项目里还是一个 User 类走天下不妨从今天起先把返回前端的对象单独抽成 VO这一步成本最低、收益最明显。觉得有用点个赞 关于 DTO 和 VO 的互相转换MapStruct / 手写 Converter下篇可以展开讲。评论区说说你们项目用的是几件套
RELATED

相关推荐

基于宏集X7无线手持HMI的AGV车队智能管理方案

基于宏集X7无线手持HMI的AGV车队智能管理方案

前言在全球电商与跨境物流高速膨胀的今天,仓储物流中心正从"人力密集型"向"自动化集群"加速跃迁。重载AGV作为物流自动化的核心执行单元,其调度效率、运行安全性与全生命周期运维成本,直接决定了仓储体系的吞吐上限。当A…

📅 2026/10/24 19:49:35
CAN FD协议与MCAN模块:从原理到实战的嵌入式通信指南

CAN FD协议与MCAN模块:从原理到实战的嵌入式通信指南

1. MCAN模块与CAN FD协议深度解析在汽车电子和工业控制领域,控制器局域网(Controller Area Network, CAN)总线堪称通信的“脊梁”。它就像一套高效、可靠的神经系统,连接着车内上百个电子控制单元(ECU)或工…

📅 2026/10/24 20:02:17
ADC噪底与灵敏度:原理、计算与优化策略

ADC噪底与灵敏度:原理、计算与优化策略

1. ADC噪底与灵敏度的基础概念解析 ADC(模数转换器)的噪底(Noise Floor)是指转换器在无输入信号时输出的本底噪声水平,通常以dBFS或LSB为单位表示。这个参数直接影响系统能够检测到的最小信号幅度,也就是灵…

📅 2026/10/24 19:54:01
MORE NEWS

更多资讯

📰

C++数字三角形问题与dp算法

前言 数字三角形是一道经典的动态规划(dynamic programming, DP)入门题:给定一个由数字组成的三角形,从顶部出发,每次只能走到下一行相邻的两个位置之一,求到达底部时路径上数字之和的最大值。它的规模不大…

📰

美赛C题Wordle建模:ARIMA预测、PLS回归与K-means分档

简介:这份2023年美赛C题M奖论文以Wordle游戏数据为研究对象,面向美赛参赛者、数据分析学习者及需要毕业设计参考的读者,提供一套从数据预处理到建模评估的完整研究范例。全文围绕时间序列预测、不同尝试次数得分百分比预测、单词词性与难度分…

📰

多因变量无标签小样本:ARIMA、PLS与K-means建模

简介:面向美赛参赛者与数据分析学习者的2023年美赛C题M论文,聚焦Wordle游戏数据的分析与预测,可作为竞赛论文写作、时间序列与多变量建模的学习参考,也适合毕业设计中的案例借鉴。全文围绕数据清洗与标准化、基于9个单词属性的Spe…

📰

一物一码防伪溯源系统:扫码验真+红包发放+积分到账全闭环实现

简介:本资源是一款面向企业防伪系统开发者与电商技术运营人员的‘一物一码’防伪溯源解决方案,聚焦商品真伪验证、消费者互动激励与全流程追溯三大核心需求,适用于快消、医药、酒类等高仿风险行业。压缩包共153个文件,含37个PHP后…

📰

美赛C题建模全链路:数据预处理、ARIMA预测与PLS-Kmeans分档

简介:围绕2023年美赛C题Wordle数据建模的M论文,以单份PDF形式呈现,适合备战美赛、需要完整赛题解题框架的参赛者,以及做数据分析方向毕业设计的读者参考。压缩包仅含1个PDF文件,大小约2.18MB,篇幅集中&…

📰

Text to SQL系统第三层实现:复杂查询意图识别与优化

1. 项目概述Text to SQL系统作为自然语言处理与数据库技术交叉领域的重要应用,正在深刻改变着非技术人员与数据库交互的方式。这个看似简单的"输入问题,输出SQL"功能背后,隐藏着复杂的实现逻辑和技术挑战。今天我们就来拆解这个系统…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬