实体类(VO,DO,DTO)的划分
什么是“实体类”
实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。实体类有两方面内容,存储数据和执行数据本身相关的操作。
POJO(plain ordinary java object) 简单无规则 java 对象
最简单的实体类是POJO类,含有属性及属性对应的set和get方法,只有属性字段及 setter 和 getter 方法!。
领域模型中的实体类
领域模型中的实体类分为四种类型:VO、DTO、DO、PO,各种实体类用于不同业务层次间的交互,并会在层次内实现实体类之间的转化。
业务分层为:视图层(VIEW+ACTION),服务层(SERVICE),持久层(DAO)
相应各层间实体的传递如下图:
1、用户发出请求(可能是填写表单),表单的数据在展示层被匹配为VO
2、 展示层把VO转换为服务层对应方法所要求的DTO,传送给服务层。
3、服务层首先根据DTO的数据构造(或重建)一个DO,调用DO的业务方法完成具体业务。
4、 服务层把DO转换为持久层对应的PO(可以使用ORM工具,也可以不用),调用持久层的持久化方法,把PO传递给它,完成持久化操作。
5、对于一个逆向操作,如读取数据,也是用类似的方式转换和传递,略。
DAO(data access object) 数据访问对象
DAO 中包含了各种数据库的操作方法。通过它的方法 , 结合 PO 对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合 VO, 提供数据库的 CRUD 操作。
PO(persistant object) 持久对象
通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。(DTO和数据库自段一一对应,PO可以不用)
DO(Domain Object)领域对象
就是从现实世界中抽象出来的有形或无形的业务实体。
DTO(Data Transfer Object):
数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象
VO(View Object):
视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。