VO,DTO,BO,PO,DO
VO(View Object):
视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
DTO(Data Transfer Object):
数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,更符合泛指用于展示层与服务层之间的数据传输对象。
BO(Business Object):
业务对象,把业务逻辑封装为一个对象,这个对象可以包括一个或多个其它的对象。
PO(Persistent Object):
持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。
DO:
DO( Data Object)这个等同于上面的PO (阿里开发手册)
DO(Domain Object)这个等同于上面的BO (Domain-Driven Design 领域驱动设计)
区别和联系:
VO:一般只在controller层,同前端交互,只用于展示数据;
DTO:一般在controller层或者service层,同VO数据基本一致,
一般DTO为原始数据,VO为展示数据,VO可能存在对数据的修改,如“gender”:“男” ->“gender”:“公子”
BO:一般只在service层,业务逻辑对象,对PO的整合数据,不一定完全对应PO
PO:一般只在dao层,持久化对象,对应数据库
示例:
PO:Vm(对应t_vm表) VmDetails(对应t_vm_details表)
VmBo:包含Vm和VmDetails的全部属性
VmDto:同VmBo基本一致,可能不展示部分数据,可能展示部分整合数据
VmVo:同VmDto基本一致,可能不展示部分数据,可能展示部分整合数据
使用时可能不会有全部四层结构:
如 Vo/Dto Bo Po 三层结构
如 Vo/Dto/Bo Po 两层结构
参考:
https://cloud.tencent.com/developer/article/2218031
https://zhuanlan.zhihu.com/p/681606069