Skip to content

TIP

J2EE开发中大量的专业缩略语时常让人迷惑, 特别是对于还没毕业的新人来说更是摸不清头脑。与行业大牛谈技术时,人家出口就是POVOBODTOPOJODAO 等,逼格满满。为了熟悉业务(装逼),下面来一起学习下Java项目开发中这些专属名词的概念及其作用吧

J2EE开发开发中PO,BO,VO,DTO,POJO,DAO的概念及其作用

PO(bean、entity等命名)

  • Persistant Object 持久对象:数据库表中的记录在 Java 对象中的显示状态
  • 最形象的理解就是一个 PO 就是数据库中的一条记录
  • 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象

BO(service、manager、business等命名)

  • Business Object业务对象:主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象
  • 形象描述为一个对象的行为和动作,当然也有涉及到其它对象的一些行为和动作
  • 比如处理一个人的业务逻辑,有睡觉、吃饭、上班、加班等行为,还有可能有和别人交谈、合作的行为
  • 这样处理业务逻辑时,我们就可以针对BO去处理

VO(from也有此写法)

  • Value Object 值对象:主要体现在视图的对象,对于一个 WEB 页面将整个页面的属性封装成一个对象,然后用一个 VO 对象在控制层与视图层进行传输交换

Domain(领域对象)

领域是一个大范围,如简历域包括工作经验表、项目经验表、简历基本信息表。在 domain 包就可以定义一个大的简历对象,将三个表的内容整合在一个对象中,作为整体操作。

DTO(经过处理后的PO,可能增加或者减少PO的属性)

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

POJO(POJO是一种概念或者接口,身份及作用随环境变化而变化)

  • Plain Ordinary Java Object 简单 Java 对象:即 POJO 是一个简单的、普通的 Java 对象,它不包含业务逻辑或持久逻辑等,但不是 JavaBean、EntityBean 等,不具有任何特殊角色且不继承或不实现任何其它 Java 框架的类或接口
  • POJO 有一些 Private 的参数作为对象的属性。然后针对每个参数定义了 get 和 set 方法作为访问的接口,POJO 对象有时也被称为 Data 对象,大量应用于表现现实中的对象
  • 一个 POJO 持久化以后就是 PO,直接用它传递、传递过程中就是 DTO,直接用来对应表示层就是 VO

033

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

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

Controller(控制层)

  • 控制层主要由Action / Servlet等构成(目前Spring MVC则是通过@Controller标签使用),这一层是业务层与视图层打交道的中间层,负责传输VO对象和调用BO层的业务方法,负责视图层请求的数据处理后响应给视图层

View(视图层)

  • 主要是指由JSP、HTML等文件形成的显示层

上述名词在实际项目的应用举例

控制层( controller-action ),业务层/服务层( bo-manager ),实体层( po-entity ),数据访问( dao ),视图对象( Vo-本项目省略 ),视图层( view-jsp/html )

034

总结一下

使用具体的 XO 需要看具体的环境以及项目的架构,在不同的层、不同的应用场合,对象的身份也不一样,而且对象身份的转化也是很自然的。就像家庭里丈夫对于妻子来说就是老公,对孩子来说就是父亲。

设计这些概念的初衷不是为了唬人,而是为了更好的理解和处理各种逻辑,让大家能更好地使用面向对象的方式来处理问题

在平时开发项目中应当尽量避免过度设计各层,因为这样会带来大量的工作和不必要的重复工作。如果不是大型系统需要,则应该简化一些层,因为技术始终是要为应用服务的