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/R Mapping 是 Object Relational

Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R

Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。

VO,值对象(Value Object),PO,持久对象(Persisent

Object),它们是由一组属性和属性的get和set方法组成。从结构上看,它们并没有什么不同的地方。但从其意义和本质上来看是完全不同的。

1.VO是用new关键字创建,由GC回收的。

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

2.VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。

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

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

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

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

-------------------------------------------------

PO是持久化对象,它只是将物理数据实体的一种对象表示,为什么需要它?因为它可以简化我们对于物理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程。VO是什么?它是值对象,准确地讲,它是业务对象,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。

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

----------------------------------------------------

关于java内容_关于java一些概念性的内容相关推荐

  1. java按行读取txt文件内容_对txt文件中的内容进行排序

    如果您的文件中每行都有单词或术语,则可能需要对其进行排序.Java Arrays.sort是执行此操作的常用功能.Collections.sort()是另一个不错的说法.这是一个示例和代码. 在文件E ...

  2. java获取文件新增内容_关于java生成文件,立即又读这个文件但又找不到文件新增内容的问题...

    展开全部 写文件之后,应该有一个刷新流缓冲的flush()方法.该方法可以保证你可以读到你e69da5e6ba903231313335323631343130323136353331333332643 ...

  3. java 复制文本内容_基于java文本复制的7种方式总结

    如下所示: package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  4. java 修改文件内容_用Java修改现有文件内容

    小编典典 如对类似问题的公认答案中所建议: 同时以写入模式打开一个临时文件,对于每一行,读取它,必要时进行修改,然后写入该临时文件.最后,删除原始文件并重命名临时文件. 根据您的实现,类似于以下内容: ...

  5. java读取jsp文件内容_使用Java读取Excel文件内容

    问题:我能用Java读取一个Excel文件吗?如果能,怎么做? 回答:是的,可以用Java读取Microsoft Excel文件.微软提供了一个Excel的ODBC驱动程序,因此我们就可以使用JDBC ...

  6. mac java安全_关于 Java for Mac OS X 10.4 发行版 7 的安全性内容

    Java CVE-ID:CVE-2008-1185.CVE-2008-1186.CVE-2008-1187.CVE-2008-1188.CVE-2008-1189.CVE-2008-1190.CVE- ...

  7. 易语言 java支持_开源Java客户端可以连接易语言服务器

    我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...

  8. java安装_使用Java 9模块化来发布零依赖本机应用程序

    java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...

  9. java书籍_学习Java最好的10本书,从入门到精通

    在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...

  10. 成都两年JAVA工程师_成都Java工程师学习路线

    成都Java工程师学习路线.java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以java并不是单机版的,只是面向对象语言.建议如果学习java体系的话可以 ...

最新文章

  1. 五分钟体验分布式调度框架xxl-job
  2. python php linux-选择PHP与Python,可以考虑这三个问题
  3. TorgoiseGit配置ssh密钥
  4. jquery 把元素移动到另外一个元素里面
  5. JavaScript—模块化(26)
  6. Bartender条码打印软件,提示30天以后该软件将会过期
  7. 记录一下blender烘焙光照漫反射贴图
  8. 当443端口被占用时如何解决?
  9. 手机浏览器/H5页面实现打开微信代码 引导关注公众号
  10. Linux ubuntu下载deb包的推荐网站
  11. matlab升幂降幂排列,升幂降幂是什么意思(升幂排列与降幂排列)
  12. Open3D 渐进式形态学滤波
  13. 记一次微信分享的坑,ios和安卓分享打开的url不一样
  14. 数字IC设计 - 逻辑综合简介与Design Compiler使用(GUI方式)
  15. PB数据窗口9种风格
  16. 65个外贸小心思,让你稳步赢得客户
  17. 《计算机组成原理》复习第七章—外围设备
  18. 【数据结构】名词速查
  19. ZZULIOJ:1068: 二进制数
  20. 天猫11.11:搜索引擎实时秒级更新

热门文章

  1. Git开发流程和工作流
  2. java.sql.SQLException: ORA-01691: Lob 段 SONARQUBE2.SYS_LOB0000119128C00008$$ 无法通过 128 (在表空间 USERS 中
  3. Centos7 查看/关闭/启动防火墙
  4. jenkins解决jenkins内存溢出问题
  5. android studio打包纯H5项目(集成5+SDK)
  6. PerfDog-移动端性能测试-基本使用
  7. 五省竞赛计算机作品,关于征集2017年华北五省(市、自治区)及港澳台大学生计算机应用大赛河北赛区竞赛作品的通知...
  8. java 16进制数组 字符串_byte数组转换成16进制字符串和字符数组的方法
  9. 河南洛阳计算机操作题,洛阳中招理化生实验操作考试、信息技术考试下月1日开考...
  10. C/C++ _wcsupr_s 函数 – unicode 字符串小写转大写 - C语言零基础入门教程