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方法,不会有其他修改数据库的方法。

相关推荐
凯酱1 小时前
MyBatis 中 OGNL 的使用:从入门到实战
java·tomcat·mybatis
吴声子夜歌7 小时前
Java面试——算法
java·算法·面试
evans在进步7 小时前
LeetCode 64:最小路径和——Java 原地动态规划详解
java·leetcode·动态规划
凤山老林9 小时前
Spring Boot 3.x AOT 编译实战:从原理、踩坑到生产落地
java·spring boot·后端
博傅9 小时前
Spring 核心原理
java·后端·spring
yurenpai(27届找实习中)9 小时前
从零读懂 AI 智能客服(一):模块职责与 SSE 聊天链路(后端架构)
java·人工智能·架构·langchain4j
陈皮波比茶9 小时前
Swagger
java
小闫BI设源码10 小时前
Elasticsearch面试必看:如何让客户端精准选择节点高效执行请求?
java·elasticsearch·面试宝典·深入解析
摇滚侠10 小时前
《SpringBoot 3:入门与应用实战》第 5 章 使用 Spring Boot 阅读笔记 9
java·spring boot·笔记
进阶的小名10 小时前
Spring AI 2.0 探索:多 OpenAI-Compatible 模型接入,以及下一代 Session 记忆管理
java·人工智能·后端·gpt·spring·ai·chatgpt