一、简单Java对象
1️⃣PO persistent object
持久对象。与数据库里表字段一一对应。PO是一些属性,以及set和get方法组成。一般情况下,一个表对应一个PO,直接与操作数据库的crud相关。
2️⃣VO view object
/value object
表现层对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不。这根据业务的需要而定。对于页面上要展示的对象,可以封装一个VO对象,将所需数据封装进去。
3️⃣DTO data trasfer object
数据传输对象。这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。主要用于远程调用等需要大量传输对象的地方。
比如一张表有 100 个字段,那么对应的 PO 就有 100 个属性。 但是界面上只要显示 10 个字段, 客户端用 WEB service 来获取数据,没有必要把整个 PO 对象传递到客户端,
这时就可以用只有这 10 个属性的 DTO 来传递结果到客户端,这样也不会暴露服务端表结构 . 到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为 VO。
4️⃣POJO plain ordinary java object
/pure old java object
简单无规则 java 对象,纯的传统意义的 java 对象。
5 DO(Domain Object): 领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
模型
下面以一个时序图建立简单模型来描述上述对象在三层架构应用中的位置
- 用户发出请求(可能是填写表单),表单的数据在展示层被匹配为VO。
- 展示层把VO转换为服务层对应方法所要求的DTO,传送给服务层。
- 服务层首先根据DTO的数据构造(或重建)一个DO,调用DO的业务方法完成具体业务。
- 服务层把DO转换为持久层对应的PO(可以使用ORM工具,也可以不用),调用持久层的持久化方法,把PO传递给它,完成持久化操作。
- 对于一个逆向操作,如读取数据,也是用类似的方式转换和传递,略。
二、复杂Java对象
1️⃣BO/DO bussiness object
/Domain Object
业务对象、域对象。封装业务逻辑的 Java 对象,通过调用 DAO 方法,结合 PO,VO 进行业务操作。一个BO对象可以包括多个PO对象。如常见的工作简历例子为例,简历可以理解为一个BO,简历又包括工作经历,学习经历等,这些可以理解为一个个的PO,由多个PO组成BO。
2️⃣DAO data access object
数据访问对象。此对象用于访问数据库。通常和 PO 结合使用,DAO 中包含了各种数据库的操作方法。通过它的方法,结合 PO 对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。