[Java EE]辨析: POJO(PO / DTO / VO) | BO/DO | DAO
概念不清,会很影响开发中的逻辑性和条理性,进而影响接口设计,代码编写的质量。
网络上大家对这些个概念的探究很多,但终究没有一个统一的说法。
不论哪家解释,我觉得最重要的是: 1)词汇之间的解释统一; 2)词汇之间的联系不冲突,能自圆其说,自成一体。
在自己初步探索后,个人更认同这样的理念(如下)。
若读者凑巧阅读到本文,欢迎一起探讨。
1 POJO := Plain Ordinary Java Object
POJO := Plain Ordinary Java Object
简单的Java对象
POJO ⊇ { PO, DTO, VO }
PO := Persistent Object
持久对象
用途: 用于表示数据库中的一条记录,映射成Java对象
PO仅用于表示数据库数据,无任何其它的数据操作
DTO := Data Transfer Object
数据传输对象
用途: DTO通常用于【不同Web服务之间(RestFul / RPC调用 / WebService调用等)】或【同一服务的不同分层之间的数据传输】 ; 减小数据传输量
一个DTO可以对应多个从存储层返回的PO(Persistent Object)的json数组,这里可以使用AutoMapper来进行自适配。
- DTO存在的必要性
DTO不是为MVC的视图而存在的模型,而是为了适应来自前端请求而存在的。
DTO模型把来自前端的请求(这个请求不管来自前后端分离的页面,还是mvc的视图页面)封装在DTO模型中,然后服务端处理转换成Entity Framework中的PO模型。
VO := View Object(个人更认同) := Value Object
视图对象/值对象
VO for request and response of users or controller layers
用途: 用于表示一个与前端交互的Java对象;用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
举例:展示层将DTO传送过来男性显示成帅哥(客户端1),或者显示成靓仔(客户端2);将帅哥或者靓仔,转换成男性,以DTO形式请求服务端。
视图模型VO可以对应客户端的网页显示,同样的DTO比如性别男,可以对应多个VO进行显示,即可以对应多个客户端,比如VO1把性别男显示成帅哥,VO2把性别男显示成靓仔等等。
- 视图对象存在的必要性/ VO VS DTO
如果是一个DTO对应一个VO,则DTO=VO;
但是如果一个DTO对应多个VO,则展示层需要把VO转换为服务层对应方法所要求的DTO,传送给服务层。
从而达到服务层与展示层解耦的效果。
- VO VS PO:
PO: 纯数据库表记录的完全映射;
VO: 仅包含前端需要展示的数据/属性;(需要对前端/用户屏蔽部分字段;减小数据传输量)
2 BO/DO := Business Object / Domain Object
BO/DO := Business Object / Domain Object
业务对象/领域对象
BO 包含了业务逻辑,常封装了对DAO,RPC等的调用;
可进行PO,VO,DTO之间的转换;
通常属于业务层,但要区别于直接对外提供服务的服务层;
BO提供基本业务单元的基本业务操作,在设计上属于被服务层业务流程调用的对象,一个业务流程可能需要调用多个BO来完成
3 DAO
Database Access Object
数据库访问对象
用途: 用DAO访问数据库,包括增删查改等操作;同POJO一起使用
4 小结


假定: 我们有一个面试系统,数据库中存储了很多面试题,通过 web 和 API 提供服务。可能会做如下的设计:
- 数据库表:面试题
- PO:
- VO:
- DTO:
- DAO:
- BO:
4 参考文献
[Java EE]辨析: POJO(PO / DTO / VO) | BO/DO | DAO的更多相关文章
- java EE中使用PO和VO的注意事项
1.基本定义 PO(Persistence Object 持久化对象)是直接跟持久层数据库打交道的java Bean (model,entity,bean等叫法都是可以的),里面除了私有的成员变量之 ...
- po dto vo bo
DozerBeanMapper是JavaBean的映射工具,可以进行对象之间相同属性名赋值 关于PO.DTO.VO在分层模型之间的关系:首先在持久层由DAO访问数据库将数据对象封装成PO,然后 ...
- java术语(PO/POJO/VO/BO/QO/DAO/DTO)
一.概念理解 这些概念用于描述对象的类型:由于java是面向对象的语言:程序的世界就是各个对象之间的"交互":在交互的工程中会存在多个层次,每个层次中所拥有(关注)的内容都是不 ...
- DAO DTO VO BO
DAO叫数据访问对象DTO是数据传输对象DAO通常是将非对象数据(如关系数据库中的数据)以对象的方式操纵.DTO通常用于不同层(UI层.服务层或者域模型层)直接的数据传输,以隔离不同层,降低层间耦合 ...
- Java中的几种对象(POJO,PO,DTO,DAO,BO)
j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维. POJO(plain old java object):普通的java对象,有别于特殊的j ...
- java的几种对象(PO,VO,DAO,BO,POJO,DTO)解释
一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对数 ...
- Java中DAO/DTO/PO/VO/BO/QO/POJO
ORM:是Object Relational Mapping(对象关系映射)的缩写. 通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R/M的世界里,有两个基本的也是重要的东东需要了 ...
- 【java编程】vo、po、dto、bo、pojo、entity、mode如何区分
Java Bean:一种可重用组件,即“一次编写,任何地方执行,任何地方重用”.满足三个条件 类必须是具体的和公共的 具有无参构造器 提供一致性设计模式的公共方法将内部域或暴露成员属性 VO valu ...
- Java 中 VO、PO、DTO、BO、POJO、DAO 之间的区别与解释
转载:https://www.cnblogs.com/hunmeng/p/11298680.html VO value object:值对象 通常用于业务层之间的数据传递,由new创建,由GC回收. ...
- Java中BO、DAO、DO、DTO、PO、POJO、VO的概念
在程序开发中,经常会碰到各种专业术语,这里统一做一下解释,有遗漏或理解错误的恳请指正. BO(Business Object)业务对象 主要作用是把业务逻辑封装为一个对象,这个对象可以包括一个或多个其 ...
随机推荐
- 在NCBI中下载SRA数据
目前,在NCBI中下载SRA数据主要有三种方式: 利用Aspera工具下载. 利用SRA Toolkit下载. 利用wget命令直接下载 第三种最为方便.其中的关键是得到下载数据的链接,即ftp的地址 ...
- 狐漠漠养成日记 Cp.00000 前言
前言 狐漠漠是我的常用网名,来源是因为我非常非常非常喜欢耳廓狐(也称作沙漠狐),所以我就给自己拟造了一个名叫狐漠漠的虚拟形象(如下图所示). 设定上是女孩子因为我想当女孩子但是我不是所以我就在设定上满 ...
- PTA最大子列和问题
给定K个整数组成的序列{ N1, N2, ..., NK },"连续子列"被定义为{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K."最大子列 ...
- python3GUI--仿做一个网易云音乐By:PyQt5(附下载地址)
@ 目录 一.前言 二.展示-主界面 1.静图1 2.静图2 3.静图3 3.静图3 4.动图1 三.展示-登录界面 1.静图1 2.静图2 5.动图2 四.展示-系统托盘 五.UI设计记录 1.UI ...
- 20181224《网络攻防技术》Exp 8 Web综合
20181224<网络攻防技术>Exp 8 Web综合 目录 20181224<网络攻防技术>Exp 8 Web综合 相关知识点总结 web前端 web后端 数据库编程 实验内 ...
- C#发送字符串转字节含空格与0x需删去
主要作用:清除发送字符串转字节中的空格和16进制前缀0x, 字节转换按两位字符转换为一个字节,多余一位按一位字符转换一个字节 //清除空格和16进制前缀发送 String sendstr;// = n ...
- PHP实现微信提现V3版本2022-5更新接口:商家转账到零钱
微信官方又更新了接口... V3版本的微信商家转账到零钱的接口---俗称提现接口 注意事项 一:开通条件:需满足入驻满90天,连续正常交易30天,保持正常健康交易.二:分为页面发起和api接口操作,均 ...
- 微信小程序地理定位和城市选择列表
1.先获取用户是否授权地理定位,如果没有让其跳转到设置页面手动开启(获取到的位置是经纬度,需要借助其他地图SDK的地址逆解析获取省市区的名字) getSetting() { wx.getSetting ...
- 在LaTeX中使用BibTeX时的一个问题及其解决:编译PDF不随bib文件更新
问题:更新bib文件之后,编译tex文件输出的PDF文件没有相应的更新. 原理: bbl文件才是引文的信息,bib文件只是用于生成bbl文件的一个"数据集"而已. 一般来说,LaT ...
- AD使用积累 - 相同网络的覆铜和走线无法自动连接问题
像下图中这样,铜皮和走线是同一个网络,却没有连在一起. 解决方法: 选中目标铜皮,在在Properties中的Fill Mode中找到这个部分,先择Pour Over All Same Net Obj ...