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,它具有领域业务逻辑

posted @   lovleo  阅读(2569)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示