PO、VO、BO、DAO、DTO关系图
DAO(Data Access Object)数据访问对象,数据访问:顾名思义就是与数据库打交道,它封装了与底层数据源(如数据库)的交互逻辑。为业务逻辑层(Service)提供数据服务接口,隐藏了底层数据源的细节和复杂性。
PO(persistant object )持久对象,可以看成是与数据库中的表相映射的java对象,完全符合Java Bean规范的纯Java对象,没有增加额外的属性和方法。持久对象是由数据库创建并管理的,其生命周期与数据库密切相关。
用途:PO通常用于与数据库进行交互,作为数据访问对象(DAO)层的数据模型。
BO(Business Object)业务对象,封装了与业务相关的数据和操作逻辑。包含了业务规则和业务逻辑的实现。可能包含多个PO或DTO的属性,以及处理这些属性的业务方法。
比如PO1
是交易记录,PO2
是登录记录、PO3
是商品浏览记录、PO4
是添加购物记录,BO
就是个人网站行为对象
用途:BO负责处理业务逻辑、数据校验和与DAO的交互等任务,确保数据的完整性和业务规则的正确性。
DTO(Data Transfer Object)数据传输对象 ,用于在系统的不同部分之间传输数据。DTO是一个简单的POJO(Plain Old Java Object),不包含任何业务逻辑。主要用于服务层(Service)和展示层(Controller)之间的数据传输。可以包含多个PO或VO的属性,根据具体业务场景进行定制。
比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,
如果用这个对象来对应界面显示,那此时它的身份就转为VO
VO(View/Value object)视图对象,通常用于业务层之间的数据传递,如从Controller层到Service层,通常是从PO中提取出来的一部分数据,用于展示和传递给前端界面。VO对象通常只包含属性和对应的getter和setter方法,用于存储和获取数据。和PO一样也是仅仅包含数据而已。
用途 :VO作为数据传输的载体,简化了数据的传输和降低了层与层之间的耦合度。
可以和表对应,也可以不,这根据业务的需要。PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。
POJO(Plain Old Java Objects)简单的Java对象 ,就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来,
而且简称比较直接.其中有一些属性及其getter、setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.
当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法