作者:Knight王
链接:https://www.zhihu.com/question/39651928/answer/87536000

DO我不确定有没有这个东西,就暂时不说了, POJO PO BO DTO VO 我归在一起,因为PO DTO VO BO 都叫是POJO,就是个简单的java对象;DAO 的话就是进行数据库增删改查的类。
下面重点说下这几个,他们都是POJO
PO 持久对象,数据;
BO 业务对象,封装对象、复杂对象 ,里面可能包含多个类;
DTO 传输对象,前端调用时传输 ;
VO 表现对象,前端界面展示。

当你业务足够简单时,一个POJO 也完全当做PO BO DTO VO 看,下面是例子:
比如有个用户类 只有 name 以及 phone
对于数据库层面也就两列,业务层面,传输,和前台展示时 都只有这两项。

然后说下他们区别开来的例子:
1 、还是用户类 name phone 加了个password。
那么你后端的PO属性也是这3个,一般数据库里这个表有几个字段你的PO就有多少属性,但是传输到前台或者展现时,我们不应该把password 密码这种东西也一起传过去,所以他们的DTO VO 就还是 name + phone
po : name phone password
dto : name phone
vo : name phone

2、现在又加了一个 枚举的状态位 status 表示用户的一些特殊状态,前台不会直接显示,可能会根据这个状态产生后续的操作,
po : name phone password status
dto : name phone status
vo : name phone

3、接着看下BO ,一个用户下面 肯定会关联很多其他的表
比如用户设置 用户信息等,那么这个BO 下 不但有用户本身的一些属性,还包含了用户设置 和用户信息这两个类。

http://www.blogjava.net/vip01/archive/2013/05/25/92430.html

J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了(听过老罗对这种现象的批判的朋友会会心一笑)。

首先声明偶也不是什么高手,以下总结都是自己的体会。不对之处请您多指教。

PO:
persistant object持久对象

最形象的理解就是一个PO就是数据库中的一条记录。
好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。


BO:
business object业务对象

主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
比如一个简历,有教育经历、工作经历、社会关系等等。
我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。
建立一个对应简历的BO对象处理简历,每个BO包含这些PO。
这样处理业务逻辑时,我们就可以针对BO去处理。


VO :
value object值对象
ViewObject表现层对象

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


DTO :
Data Transfer Object数据传输对象
主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO


POJO :
plain ordinary java object 简单java对象
个人感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。

一个POJO持久化以后就是PO
直接用它传递、传递过程中就是DTO
直接用来对应表示层就是VO


DAO:
data access object数据访问对象
这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要.
主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO

总结下我认为一个对象究竟是什么O要看具体环境,在不同的层、不同的应用场合,对象的身份也不一样,而且对象身份的转化也是很自然的。就像你对老婆来说就是老公,对父母来说就是子女。设计这些概念的初衷不是为了唬人而是为了更好的理解和处理各种逻辑,让大家能更好的去用面向对象的方式处理问题.

大家千万不要陷入过度设计,大可不必为了设计而设计一定要在代码中区分各个对象。一句话技术是为应用服务的。

欢迎指正。


画了个图,感觉没有完全表达出自己的意思。。。。。谁帮忙完善下,最好能体现各个O在MVC中的位置

pojo vo bo dto javabean相关推荐

  1. 关于java中文件命名POJO/VO/BO/DTO

    POJO POJO(Plain Ordinary Java Object),简单的Java对象,名字强调它是一个普通的java对象. POJO只有private属性以及这个属性的public的get和 ...

  2. PO VO BO DTO POJO DAO(转)

    2EE开发中大量的专业缩略语很是让人迷惑, 特别是对于刚毕业的新人来说更是摸不清头脑.若与公司大牛谈技术人家出口就是PO VO BO DTO POJO DAO 等,让新人们无比仰慕大牛. 为了让新人快 ...

  3. JavaEE PO VO BO DTO POJO DAO 整理总结(转)

    阅读目录 1.DAO[data access object]数据访问对象 2.DTO[data transfer object]数据传输对象 3.PO[persistant object]持久层对象 ...

  4. JavaEE PO VO BO DTO POJO DAO 整理总结

    阅读目录 1.DAO[data access object]数据访问对象 2.DTO[data transfer object]数据传输对象 3.PO[persistant object]持久层对象 ...

  5. 关于JAVA Bean实体类对象pojo,vo,po,dto,entity之间的区别

    关于JAVA Bean实体类对象pojo,vo,po,dto,entity之间的区别: Pojo: Pojo 普通的java对象 最基本的javaBean只有属性 加上属性的get,set方法,可以转 ...

  6. java几种对象的区别(PO,POJO,VO,BO,DAO)

    PO(persistant object 持久对象) :与数据库中的表相映射的java对象,每个属性基本都对应数据库表里面某个字段: 可以理解为一个PO就是数据库中的一条记录,一条记录即为一个对象. ...

  7. DO VO BO DTO POJO概念记录

    第 1 个:DAO DAO(Data Access Object)数据访问对象,它是一个面向对象的数据库接口,负责持久层的操作,为业务层提供接口,主要用来封装对数据库的访问,常见操作无外乎 CURD. ...

  8. JSP PO VO BO DTO POJO DAO解释

    PO :persistent object持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录. 2 .在hibernate持久化框架中与i ...

  9. java术语(PO/POJO/VO/BO/DAO/DTO)

    PO(persistant object) 持久对象 在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据 ...

  10. POJO VO PO DTO 和JavaBean

    最近在阿里手册的是突然看见PO,VO等名词发现自己还没有一个清晰的概念所以做了一些笔记. 我 给这些概念画了个关系图. pojo 为了和EJB区分而生的.就是一个简单的java对象也就是在构建这个类的 ...

最新文章

  1. linux架构师高级系统调优策略
  2. econtrol窗体设计器
  3. 项目实践精解:C#核心技术应用开发
  4. ecs服务器数据迁移_某国际物流集团的云迁移解决方案
  5. Spring Boot 2.3.0 发布
  6. java 标志一个方法为过时方法
  7. Spring Boot 集成MyBatis
  8. react 组件怎么公用_在React中的组件之间共享数据
  9. 如何在 Mac 上自定 Safari 浏览器窗口?
  10. VMware 安装 win7、win10、MAC 和网络模式VMnet0、VMnet1、VMnet8解释
  11. Linux下报ora-12162,ORA-12162: TNS:net service name is incorrectly specified
  12. vs解决方案和项目工程
  13. LeetCode——5776. 判断矩阵经轮转后是否一致(Determine Whether Matrix Can Be Obtained By Rotation)[简单]——分析及代码(Java)
  14. Scratch教学课程:不撞南墙不回头
  15. 体素转换为点云(VRN)
  16. 深度学习:自编码器、深度信念网络和深度玻尔兹曼机
  17. MySQL加索引及导数导致的问题
  18. adb 指令连接手机、平板进行Wi-Fi调试
  19. 程序员能力模型与沟通技巧(一)
  20. 0x00007FFD977C04A8 (Qt5Sqld.dll)处(位于 a.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突

热门文章

  1. 刘海屏的MacBook Pro你会买吗?
  2. CleanMyMac偏好设置你知道多少?
  3. 最新教程:M1芯片的Mac电脑进入恢复模式?
  4. 观测天文角分辨率单位换算
  5. 更换Homebrew的更新源
  6. 原生JS大揭秘—事件循环机制Event Loop
  7. KVO 的代码简洁使用
  8. 在你的 Android App 中使用 Flutter | Google开发者大会
  9. 纯干货:深度学习实现之空间变换网络-part2
  10. 删除putty的session 以及 putty的颜色设置值