综述

java的几种对象(PO,VO,DAO,BO,POJO)解释:

一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。
三、DAO:data access object 数据访问对象,此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。
四、BO:business object 业务对象,封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。
五、POJO:plain ordinary java object 简单无规则java对象,它和其他对象不是一个层面上的东西,VO和PO应该都属于它.

具体描述

1、PO

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

2、BO

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

3、VO

value object值对象
ViewObject表现层对象,即控制层(Action层)
主要对应界面显示的数据对象。对于一个WEB页面,或者SWT、SWING的一个界面,用一个VO对象对应整个界面的值。

4、DTO

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

5、POJO

plain ordinary java object 简单java对象
POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。
一个POJO持久化以后就是PO
直接用它传递、传递过程中就是DTO
直接用来对应表示层就是VO

6、DAO

data access object数据访问对象,即DAO层
这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要.
主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO
总结:一个对象究竟是什么O要看具体环境,在不同的层、不同的应用场合,对象的身份也不一样,而且对象身份的转化也是很自然的。就像你对老婆来说就是老公,对父母来说就是子女。设计这些概念的初衷不是为了唬人而是为了更好的理解和处理各种逻辑,让大家能更好的去用面向对象的方式处理问题.社会社会;

在实际的项目中,我们还会遇到一个常见的对象,那就是 Entity 实体对象,它对应数据库中的表,我们可以简单的理解为一个表对应一个 Entity,同样以交易订单表 Order 为例,如果这个表有 25 个字段,那么这个 OrderEntity 对象里面也要含有 25 个对应的属性。

转载于:https://www.cnblogs.com/mmzs/p/8185096.html

java开发各层对象含义相关推荐

  1. 谈谈Java开发中的对象拷贝

    在Java开发工作中,有很多时候我们需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息.这两个对象实例有可能是同一个类的两个实例,也可能是不同类的两个 ...

  2. 【Java开发问题】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0

    why 开发问题并不是经常遇到的,有技术问题,也有业务问题,记录一下,以备不时之需. 1 对象封装 将B类型的对象封装成A类型的对象,常用于Map对象封装成Entity对象,这里有Gson和JSON两 ...

  3. char怎么比较_为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?...

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 这条建议非常值得大家关注, 而且该问题在 Java 面试中十分常见. 还需要思考以下几个 ...

  4. java的model层实例_Struts 2.1.6 精简实例系列教程(3):新闻管理Model层的开发(整合iBatis)...

    本期开始讲Model层的开发,整合iBatis框架,iBatis是Apache旗下Java数据持久层的框架,跟Hibernate是同一类型的框架.大家可到它的官方网站去下载http://ibatis. ...

  5. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

  6. [java基础] --- java开发,service层是不是一定要写接口

    估计很多java开发的同学都遇到过,service层要写一个接口,然后再写接口的实现类,但这个接口从项目开始到项目倒闭,都不会有第二个实现,那为什么不直接写个service类呢?如果你还没想过这个问题 ...

  7. 《Android游戏开发详解》一2.18 使用Java API中的对象

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.18节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.1 ...

  8. 阿里巴巴Java开发规范·各层命名规约

    1. Service / DAO 层方法命名规约 方法功能 前缀 说明 获取单个对象的方法 get getObject 获取多个对象的方法 list 复数形式结尾 listObjects 获取统计值的 ...

  9. 阿里巴巴 Java 开发手册之编程规约(一)-------我的经验

    阿里巴巴 Java 开发手册 一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: _name / __na ...

最新文章

  1. 架构设计之「服务限流」
  2. python filedialog_Python使用FileDialog将列表保存到指定的excel文件中,python,filedialog
  3. 幂等性概念及数据库乐观锁机制
  4. *【HDU - 2819】Swap(二分图匹配,输出路径)(待证明:是否是最少交换次数?)
  5. 【完美解决方案】module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
  6. CentOS FTP服务(vsftpd)配置
  7. linux固定dns怎么设置,Linux之如何进行固定IP、DNS等设置
  8. AndroidDeveloper Weekly No.2
  9. 电赛公开课整理(二),电路基础,截图+模电知识【16000字】【原创】
  10. 弘辽科技:淘宝搜索流量是什么意思?如何提升流量?
  11. NOI OJ 1.3 11:计算浮点数相除的余数 C语言
  12. 厉害!95后2万月薪程序员,背着电脑送外卖,途中还要改bug!
  13. 牛客小白月赛24 J.建设道路
  14. 引擎系列学习【一】Color Model(颜色模型)
  15. 工欲善其事必先利其器之Mac ps快捷键
  16. kernel下Documentation目录详解
  17. 【C语言】指针的基本知识
  18. (中篇)中高级前端大厂面试秘籍,寒冬中为您保驾护航,直通大厂
  19. 越过验证码 selenium模拟登录B站项目实战(附源码)
  20. 思科Cisco交换机的基本命令

热门文章

  1. 网易云音乐评论 可视化分析
  2. 智能电视 = Android + 高清大屏幕 ?
  3. [《南国雪下》闲笔记事集]2010年12月15日 记雪
  4. 基于微信小程序的毕业设计选题
  5. 解决QT-mingw32编译“ too many sections(...)”问题
  6. 物流服务--查询物流
  7. How to do Mathematics
  8. 名帖176 苏轼 行书《杜甫堂成诗卷》
  9. 论文阅读笔记《Dynamic Few-Shot Visual Learning without Forgetting》
  10. SpringBoot项目启动失败: is not eligible for getting processed by all BeanPostProcessors (for example: not)