Java 中,DTO 和 VO 的区别是什么?
Jihongchang(讨论 | 贡献)2023年2月7日 (二) 22:19的版本 (建立内容为“DTO 更多的是一种用于在系统之间传输数据的对象。它通常仅包含数据,没有任何行为。DTO 的目的是保证数据的安全和效率…”的新页面)
DTO 更多的是一种用于在系统之间传输数据的对象。它通常仅包含数据,没有任何行为。DTO 的目的是保证数据的安全和效率,而不是表示数据的业务含义。
VO 是一种表示数据的对象,通常没有任何行为。它可以包含与业务相关的数据,并且在表示数据的同时也表示数据的业务含义。
以上参考 chatgpt 的回答。
道理上讲,DTO 转字符串之后响应给其他系统(HTTP 的前端调用或者其他跨系统的调用)可以是“[true, 1, "123", 2.13, {"key":"value"}]”,更主要的目的是传输数据,而不是说明传输数据的业务含义;
而 VO 应该能够说明数据的业务含义,比如“{price:12, name:"笔"}”,
但实际使用的时候 DTO 和 VO 似乎也非常相似,用起来基本是DTO 封装在 Controller 层接收的数据,VO 封装在 Controller 层响应的数据。
简而言之,DTO 的重点是数据传输,而 VO 的重点是表示数据和业务含义。它们都有各自的用途,可以根据业务需求进行选择使用。