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


    名词解析 — — 企业开发中的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

  • 相关阅读:
    Angular 中的数据交互GET POST
    动手学强化学习(一)
    ZigBee案例笔记 -- RFID卡片读写(模拟饭卡)
    【Linux】基本指令(四)
    微信小程序--》你真的了解小程序组件的使用吗?
    220V转12V芯片-交流45v-265v输入,固定12v输出峰值电流600MA
    Vue课程62-实现添加的功能
    pdf怎么合并在一起?几种方法快速合并
    最短路问题
    LeetCode 75 part 07 队列
  • 原文地址:https://blog.csdn.net/weixin_45565886/article/details/126959997