详解Java业务领域分层模型中的vo/po/dto/pojo/bo

简介: 详解Java业务领域分层模型中的vo/po/dto/pojo/bo

分层的目的,就是保证复用和相对稳定性!

开局一张图,后文全靠编

1.png

VO值对象(Value Object)

new关键字创建,由GC回收。VO是值对象,精确点来说,它是业务对象,存活在业务层,由业务逻辑使用,其存活目的就是给数据提供一个生存地。


主要对应界面显示的数据对象。对于一个WEB页面,用一个VO对象对应整个界面的值。


VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。


PO持久对象(Persisent Object)

向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。


PO是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并简化对象数据与物理数据之间的转换。


PO的属性跟数据库表字段一一对应。


Hibernate里的实体bean就是个PO,也叫POJO。


PO对象需要实现序列化接口。

PO是持久化对象,它只是将物理数据实体的一种对象表示。

为什么需要它?因为它可以简化我们对于物理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程。


VO是什么?它是值对象,准确地讲,它是业务对象,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。


首先说PO和VO吧,它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(当然我是指他们的属性)。正因为这样,PO独立出来,数据持久层也就独立出来了,它不会受到任何业务的干涉。又正因为这样,业务逻辑层也独立开来,它不会受到数据持久层的影响,业务层关心的只是业务逻辑的处理,至于怎么存怎么读交给别人吧!不过,另外一点,如果我们没有使用数据持久层,或者说没有使用hibernate,那么PO和VO也可以是同一个东西,虽然这并不好。


PO(persistant object) 持久对象

在o/r映射的时候出现的概念。

通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。

最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。

PO中应该不包含任何对数据库的操作。

  • 好处
    把一条记录作为一个对象处理,方便的转为其它对象。


DTO(Data Transfer Object 数据传输对象)

常用于远程调用等传输对象的地方,作为请求或相应对象。

比如数据库表有100个字段,其PO就有100个属性,但界面上只需显示10个字段,客户端请求获取数据,没有必要传递整个PO,可以只用这10个属性的DTO传递结果响应给客户端,也不会暴露数据库表结构。到达客户端以后,如果用这个对象来对应界面显示,那时转为VO。


BO(Business Object) 业务对象

从业务模型角度看,见UML元件领域模型中的领域对象。

通过调用DAO方法,结合PO,VO进行业务操作。把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。

比如一个简历,有

  • 教育经历 ======> PO
  • 工作经历 ======> PO
  • 社会关系 ======> PO


建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,就可以针对BO处理。

POJO(plain ordinary java object)

简单无规则java对象

纯的传统意义的java对象。就是说在一些Object/Relation Mapping工具中,能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。最基本的Java Bean,只有属性字段及setter和getter方法!


范围上看 POJO 包含了 PO。


VO(value object) 值对象

常用于业务层间数据传递,和PO一样仅包含数据。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务需要。同DTO,在web上传递。


TO(Transfer Object),数据传输对象

在应用程序不同tie(关系)之间传输的对象


DAO(data access object) 数据访问对象

是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO, 提供数据库的CRUD操作…


POJO(Plain Ordinary Java Object 简单Java对象)

中间对象。

一个POJO持久化后就是PO。

直接用它传递、传递过程中就是DTO。

直接用来对应表示层就是VO


DAO(Data Access Object数据访问对象)

基本没有和其它O互相转化的可能性和必要性。主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出VO、DTO。


QO 查询对象


参考


https://www.cnblogs.com/zander/archive/2012/08/11/2633344.html

https://www.zhihu.com/question/57236999/answer/238514905


目录
相关文章
|
Java 流计算
在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
【2月更文挑战第6天】在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
169 3
|
存储 前端开发 Java
Java:PO、VO、BO、DO、DAO、DTO、POJO
Java:PO、VO、BO、DO、DAO、DTO、POJO
311 0
|
Java 数据库连接
JavaWeb用户信息管理系统-创建POJO以及JDBC工具类
JavaWeb用户信息管理系统-创建POJO以及JDBC工具类
167 0
|
前端开发 Java API
深度解读JAVA中的DO、BO、VO、DTO、AO、PO、DO、AO各自的含义
在刚接触一些比较规范代码的时候就遇到了这些,用于描述对象的不同类型,每个模块都是相互依赖的,所以在这里进行一个详细系统的总结。
2228 0
|
19天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
85 1
|
19天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
73 1
|
1月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
99 0
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
144 16
|
2月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。