名词解析 — — 企业开发中的VO、DTO、BO、PO、TO等

名词解析 — — 企业开发中的VO、DTO、BO、PO等

1 整体结构图

在这里插入图片描述

2 分别解析

2.1 DTO(Data Transfer Object) 数据传输对象【前后端交互】

DTO通常是前后端之间传输的对象

在后端:它的存在形式是Java对象,也就是controller层里面的东西
在前端:它通常是js里面的对象(json格式),也即是通过ajax请求回来的数据体

在微服务盛行的今天,服务和服务之间调用的传输对象能叫DTO吗?
DTO本身的一个隐含意思是要能够完整的表达一个业务模块的输出,如果服务和服务之间独立的话,我们一般来说是可以叫做DTO的。如果服务和服务之间不独立,不是一个完整的业务模块,拆开可能是因为计算复杂度或者性能的问题,那这就不能叫做DTO,只能是BO。

2.2 VO(View Object)视图对象【展示给页面】

VO就是和视图打交道的,不管展示方式是网页还是客户端又或者是APP,只要这个东西是让人看的,就叫VO。经历了视图的都归属于这个类,所以我们的输入输出类都是属于VO

VO主要的存在形式就是js里面的对象(可以简单理解为json)

2.3 VO与DTO区别【VO:后端给前端;DTO:前端给后端】

  • 字段不一样,VO根据需要会删减一些字段
  • 值不一样,VO会根据需要对DTO中的值进行展示业务的解释

举个简单的例子:

DTO可能是这样的

{
    "gender":"男", 
    "age":35 
} 

对于业务1来说只需要性别,而且因为是一个古风聊天室,也不能直接展示"男",因此经过业务解释,业务1的VO是:

{ 
    "gender":"公子" 
} 

对于业务2来说只需要年龄,而且不需要精确的年龄,因此经过业务解释,业务2的VO是

{ 
    "age":"30~39" 
} 

在这里插入图片描述

  • 课程列表查询接口,根据用户需求用户在手机端也要查询课程信息,此时课程查询接口是否需要编写手机端和PC端两个接口呢?
  1. 如果用户要求通过手机和PC的查询条件或查询结果不一样,此时就需要定义两个Controller课程查询接口,每个接口定义VO对象与前端传输数据。
  2. 手机查询:根据课程状态查询,查询结果只有课程名称和课程状态。
  3. PC查询:可以根据课程名称、课程状态、课程审核状态等条件查询,查询结果也比手机查询结果内容多。
  4. 此时,Service业务层尽量提供一个业务接口,即使两个前端接口需要的数据不一样,Service可以提供一个最全查询结果,由Controller进行数据整合。

2.4 PO(Persistent Object)持久对象【数据库】

PO对应的就是说数据库中的表结构,表中的一条记录对应的就是一个PO对象

通常来说,PO里面除了get、set方法之外没有其他的方法,对于PO来说,数量是相对固定的,一定不会超过数据库表的数量,等同于Entity

2.5 BO(Business Object)业务对象

BO就是PO的组合

比如:PO是一条交易记录,BO是一个人全部的交易记录集合对象
或者:PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,那么BO就是个人网站行为对象

BO:业务对象,"一类业务就会对应一个BO",数量上没有限制,而且BO会有很多业务操作,也就是
说除了get、set方法外,BO会有很多针对自身数据进行计算的方法。那么为什么之前的图是横跨两
层呢?因为现在很多持久层框架爱自身就提供了数据组合的功能,因此BO有可能是在业务层由业务
来拼装而成,也可能是在数据库访问层由框架直接生成。很多情况下为了追求查询效率,框架跳过
PO直接生成BO的情况非常普遍,PO只是用来增删改使用。

2.6 BO与DTO区别

主要区别是:字段的删减【通常DTO:BO的删减版】

BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供。在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成。

2.7 DO(Data Object / Domain Object)

  • DO是在阿里巴巴的开发手册中定义,DO(Data Object)其实等同于PO
  • 另一种版本的DO是DDD(Domain-Driven Design)领域驱动设计中的,DO(Domain Object),等同于上面的BO

2.8 TO(Transfer Object)

在应用程序不同tie(关系)之间传输的对象

2.9 总结

名称含义
VO(View Object)视图对象,和视图打交道
PO(Persistent Object)持久层对象,对应数据库
DTO(Data Transfer Object)数据传输对象,与前端打交道,传给前端的
BO(Business Object)业务对象,与内部业务逻辑打交道
TO(Transfer Object)传输对象,不同关系之间的传输对象

一个DTO可能对应多个VO,为了适配

在这里插入图片描述

参考文章:
https://zhuanlan.zhihu.com/p/102389552
https://blog.csdn.net/qq_40262372/article/details/112527073

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值