PO、VO、BO、DAO、DTO、POJO

PO、VO、BO、DAO、DTO关系图

DAO(Data Access Object)数据访问对象,数据访问:顾名思义就是与数据库打交道,它封装了与底层数据源(如数据库)的交互逻辑。为业务逻辑层(Service)提供数据服务接口,隐藏了底层数据源的细节和复杂性。

PO(persistant object )持久对象,可以看成是与数据库中的表相映射的java对象,完全符合Java Bean规范的纯Java对象,没有增加额外的属性和方法。持久对象是由数据库创建并管理的,其生命周期与数据库密切相关。

用途:PO通常用于与数据库进行交互,作为数据访问对象(DAO)层的数据模型。

BO(Business Object)业务对象,封装了与业务相关的数据和操作逻辑。包含了业务规则和业务逻辑的实现。可能包含多个PO或DTO的属性,以及处理这些属性的业务方法。

比如PO1 是交易记录,PO2 是登录记录、PO3 是商品浏览记录、PO4 是添加购物记录,BO 就是个人网站行为对象

用途:BO负责处理业务逻辑、数据校验和与DAO的交互等任务,确保数据的完整性和业务规则的正确性。

DTO(Data Transfer Object)数据传输对象 ,用于在系统的不同部分之间传输数据。DTO是一个简单的POJO(Plain Old Java Object),不包含任何业务逻辑。主要用于服务层(Service)和展示层(Controller)之间的数据传输。可以包含多个PO或VO的属性,根据具体业务场景进行定制。

比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,

客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,

这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,

如果用这个对象来对应界面显示,那此时它的身份就转为VO

VO(View/Value object)视图对象,通常用于业务层之间的数据传递,如从Controller层到Service层,通常是从PO中提取出来的一部分数据,用于展示和传递给前端界面。VO对象通常只包含属性和对应的getter和setter方法,用于存储和获取数据。和PO一样也是仅仅包含数据而已。

用途 :VO作为数据传输的载体,简化了数据的传输和降低了层与层之间的耦合度。

可以和表对应,也可以不,这根据业务的需要。PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。

POJO(Plain Old Java Objects)简单的Java对象 ,就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来,

而且简称比较直接.其中有一些属性及其getter、setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.

当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法

相关推荐
Lee川4 小时前
面试通关:JWT 认证与双 Token 机制深度解析
后端·面试
想学习java初学者7 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
AC赳赳老秦7 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
weixin_449173657 小时前
在 Java 中,‌线程安全的 List‌ 主要有以下几种实现方式,它们的效率取决于具体的使用场景(尤其是读写比例):
java·线程安全的list
砚底藏山河7 小时前
股票数据API接口:如何获取股票历历史分时KDJ数据
java·python·maven
Csvn7 小时前
Python 性能优化与 Profiling 工具
后端·python
不减20斤不改头像8 小时前
手机一句话开发贪吃蛇!TRAE SOLO 移动端 AI 编程实测
前端·后端
明月_清风8 小时前
K8s 从入门到上手:核心概念+常用工具全解析
后端·kubernetes
随风,奔跑9 小时前
Nginx
服务器·后端·nginx·web
MegaDataFlowers9 小时前
运行若依项目
java