首页IT科技java的dto和vo(Java架构中VO、DTO、DO、BO的区别与联系(超详解))

java的dto和vo(Java架构中VO、DTO、DO、BO的区别与联系(超详解))

时间2025-09-18 11:02:18分类IT科技浏览6577
导读:前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!...

前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识                ,有兴趣的小伙伴可以关注博主!也许一个人独行                           ,可以走的很快         ,但是一群人结伴而行            ,才能走的更远!

一                   、概念

在Java编程中                          ,VO                         、DTO        、DO              、BO这四个术语都代表了不同的对象类型              ,它们之间的区别与联系如下:

1                          、VO (View Object)

VO (View Object)        ,用于表示一个与前端进行交互的视图对象                         ,它的作用是把某个指定页面(或组件)的所有数据封装起来                。实际上                   ,这里的VO只包含前端需要展示的数据    ,对于前端不需要的数据                        ,比如数据创建和修改的时间等字段                       ,出于减少传输数据量大小和保护数据库结构不外泄的目的,不应该在VO 中体现出来                           。

2            、DTO(Data Transfer Object)

DTO(Data Transfer Object)                    ,用于表示一个数据传输对象                           ,DTO通常用于展示层(Controller)和服务层(Service)之间的数据传输对象         。DTO 与 VO概念相似    ,并且通常情况下字段也基本一致            。但 DTO 与 VO 又有一些不同                ,这个不同主要是设计理念上的                           ,比如 API 服务需要使用的 DTO就可能与 VO 存在差异                          。

3         、DO(Data Object)

DO(Data Object)         ,持久化对象            ,它跟持久层(Dao)的数据结构形成一一对应的映射关系              。如果持久层是关系型数据库                          ,那么数据库表中的每个字段就对应PO的一个属性              ,常是entity实体类        。

4                           、BO(Business Object)

BO(Business Object):业务对象        ,通常用于业务逻辑层                         ,代表了业务逻辑的实现                         。BO主要负责业务逻辑的处理                   ,包括数据校验                、数据处理    、业务逻辑处理等                   。BO可以调用多个DO    ,将多个DO组合起来                        ,形成一个完整的业务流程    。

二                           、为什么会存在Vo?

项目中                       ,看到别人直接把DTO,写上swagger注释                    ,直接返回前端                        。那么思考一下                           ,为什么不建议这么做    ,不直接把DTO返回给前端                       。

从开发过程讲                ,前后端首先会以vo和param作为返回                    、传参的协议的定义                           ,再定义协议之前         ,都没有实际的业务逻辑的处理            ,也就不会存在dto。

从项目的整体考虑                          ,如果把dto作为传给前端的对象              ,那么service层返回dto        ,service层的所有的方法不一定都是public方法                         ,也有private方法                   ,如果private方法也返回dto    ,那么也就是说有些dto不是提供给前端的                        ,有些是给前端的                       ,这样就会乱,没有了隔离性                    。

从字段的修改来说                    ,service层的方法是可以共用的                           ,一个service方法返回的dto    ,可能会被很多个controlller方法使用到                ,即使目前不会                           ,将来也可能会         ,dto会有很多参数            ,比如包含了主表信息                          ,子表信息              ,而传给前端的vo只有dto的一部分信息        ,而且不同请求给前端看到的数据不一样                         ,所以dto是共用的                   ,vo是个性化的    ,如果直接把dto提供给前端                        ,将会导致耦合性非常大                       ,一旦一个接口的需求变了,修改了dto                    ,增加了一个字段                           ,将会导致接口直接把这个新增的字段返回给了前端    ,导致(接口输出数据多余                ,和不安全性)                           。同理                           ,如果由于某个需求         ,把dto展示给前端的接口说要删除某一个字段            ,那么因为这个dto被很多接口引用                          ,一删除就会导致出问题    。

所以              ,总整体性结构而言:vo是必须存在的        ,不能把dto直接返回给前端                。高内聚                         ,低耦合                           。一般的数据传递是                   ,前端传递VO给接口(Controller)    ,接口将VO转为DTO传递给service                        ,service将DTO分解为DO                       ,调用领域服务进行调度,然后逆向转为VO或者其他的返回结果                    ,传递给前台         。

三、总结

总的来说                           ,VO                       、DTO                        、DO    、BO是分层架构中的不同对象    ,每个对象在各自的层次中承担着不同的角色                ,各自有自己的特点和用途            。在实际开发中                           ,要根据业务需求和架构要求         ,灵活使用这些对象            ,使得系统的耦合性和复杂度得到合理的控制和降低                          。

声明:本站所有文章                          ,如无特殊说明或标注              ,均为本站原创发布              。任何个人或组织        ,在未征得本站同意时                         ,禁止复制                   、盗用                         、采集        、发布本站内容到任何网站              、书籍等各类媒体平台        。如若本站内容侵犯了原著者的合法权益                   ,可联系我们进行处理                         。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
seo网站关键词优化快速工具官网(SEO关键词优化指南:提升网站排名的必备技巧) win10复制没反应(Win10复制粘贴无法使用如何修复?Win10复制粘贴无法使用的解决方法)