Java中PO,DO,DTO,VO的概念
原文:https://wenku.baidu.com/view/e03c3b0ebe64783e0912a21614791711cc797994.html
1.VO(View Object):
视图对象,⽤于展⽰层,它的作⽤是把某个指定页⾯(或组件)的所有数据封装起来。
2.DTO(Data Transfer Object):
数据传输对象,这个概念来源于J2EE的设计模式,原来的⽬的是为了EJB的分布式应⽤提供粗粒度的数据实体,以减少分布式调⽤的次数,
从⽽提⾼分布式调⽤的性能和降低⽹络负载,但在这⾥,我泛指⽤于展⽰层与服务层之间的数据传输对象。
3.DO(Domain Object):
领域对象,就是从现实世界中抽象出来的有形或⽆形的业务实体。
4.PO(Persistent Object):
持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成⼀⼀对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个
字段(或若⼲个)就对应PO的⼀个(或若⼲个)属性。
5.VO与DTO的区别
⼤家可能会有个疑问:既然DTO是展⽰层与服务层之间传递数据的对象,为什么还需要⼀个VO呢?对!对于绝⼤部分的应⽤场景来
说,DTO和VO的属性值基本是⼀致的,⽽且他们通常都是POJO,因此没必要多此⼀举,但不要忘记这是实现层⾯的思维,对于设计层⾯
来说,概念上还是应该存在VO和DTO,因为两者有着本质的区别,DTO代表服务层需要接收的数据和返回的数据,⽽VO代表展⽰层需要
显⽰的数据。
6.DTO与DO的区别
⾸先是概念上的区别,DTO是展⽰层和服务层之间的数据传输对象(可以认为是两者之间的协议),⽽DO是对现实世界各种业务⾓⾊的抽
象,这就引出了两者在数据上的区别,例如UserInfo和User(对于DTO和DO的命名规则,请参见笔者前⾯的⼀篇博⽂),对于⼀个getUser
⽅法来说,本质上它永远不应该返回⽤户的密码,因此UserInfo⾄少⽐User少⼀个password的数据。⽽在领域驱动设计中,正如第⼀篇
系列⽂章所说,DO不是简单的POJO,它具有领域业务逻辑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~