PO、VO、DTO

不知道有没有和我一样的职场新人小白有这样的疑惑,为什么一个实体类要有po、vo、dto,分这么多层有必要吗?我之前做项目的时候也接触到了这些分层,今天想写一篇来谈谈我对其的理解。

一. POJO

首先先认识一下POJO,POJO是指普通的Java对象,是一个简单的Java类,通常没有实现特定的接口或继承特定的类。POJO的涉及原则是简单、普通、存粹的Java对象。

POJO对象通常用于封装数据,包含私有字段和公共的getter和setter方法,用于对属性进行读写操作,POJO对象通常不包含业务逻辑,主要用于传输数据、数据存储和数据交换。

以下是开发过程中,POJO的使用场景:

  1. 数据传输:POJO对应用于在不同层之间传输数据,比如在业务逻辑层(service层)和表示层(Presentation层)之间传输数据。
  2. 数据存储:POJO对象用于封装数据库中的数据,通常用于与数据库进行交互的ORM(对象关系映射)
  3. 数据交换:POJO对象用于与外部系统进行数据交换。

二. DTO、VO、PO

DTO

Date Transfer Object:数据传输对象,DTO用于在不同层之间传输数据,通常用于将业务逻辑层的数据传输给表示层或持久层。

引入DTO是为了可以在不同的web服务间传输,因此需要可以序列化,实现serializable接口,还可以把相关的数据都组合到一个对象中,减少网络调用的次数,从而降低网络负载等....

举个例子,一张表中有100个列,那么对应的实体类中有100个属性,但是有一个服务调用只需要其中的10个属性,那么我们就可以创建一个只有10个属性的DTO返回给调用者,避免了数据表结构给客户端,使用数据表结构和调用结构解耦。

VO

View Object:视图对象,用于表示一个与前端进行交互的Java对象。

VO是用来保存Web、swing、android、iOS等一个页面对应的数据,以便显示。

VO和DTO比较像,区别在与当数据是为了在微服务之间进行传输时,我们使用DTO,如果是为了返回给前端进行展示时,我们使用VO。

PO

Persistent Object:持久化对象,用来表示数据库中一条记录映射成的Java对象。

与数据库的表、视图、查询结果的列一一对应,PO仅仅用来展示数据,类中只包含属性和get和set方法,不会有其他修改数据库的方法。

相关推荐
认真的酒窝10 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy11 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录91711 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
Full Stack Developme13 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
程序员老油条15 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
shushangyun_16 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..16 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超17 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫17 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc
带刺的坐椅17 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai