Java 中,DTO 和 VO 的区别是什么?

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2023年2月8日 (三) 04:41的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

DTO 更多的是一种用于在系统之间传输数据的对象。它通常仅包含数据,没有任何行为。DTO 的目的是保证数据的安全和效率,而不是表示数据的业务含义。

VO 是一种表示数据的对象,通常没有任何行为。它可以包含与业务相关的数据,并且在表示数据的同时也表示数据的业务含义。


道理上讲,DTO 转字符串之后响应给其他系统(HTTP 的前端调用或者其他跨系统的调用)可以是“[true, 1, "123", 2.13, {"key":"value"}]”,更主要的目的是传输数据,而不是说明传输数据的业务含义;

而 VO 应该能够说明数据的业务含义,比如“{price:12, name:"笔"}”,

但实际使用的时候 DTO 和 VO 似乎也非常相似,用起来基本是DTO 封装在 Controller 层接收的数据,VO 封装在 Controller 层响应的数据。

简而言之,DTO 的重点是数据传输,而 VO 的重点是表示数据和业务含义。它们都有各自的用途,可以根据业务需求进行选择使用。