为什么使用VO,DTO,BO

一、VO(View Object)

Vo顾名思义是一个有关视图的对象,主要应用于与前端之间的交互。Vo通常封装了前端调用某个接口之后,他所需要的所有的数据。Java具有面向对象的特点,但在这个前后端分离的时代,“对象”的定义,不仅仅是一个一个的类,而转变为一个又一个的接口。对于前端而言,他所面向的对象,便是后端提供的接口,而接口对象怎么去表示呢,我们选择使用返回对象的含义+Vo去创建实体类,来表示他是一个视图层的类。

二、DTO(Data Transfer Object)

Dto是相对于web网站中,前后端而言的“数据传输层”所需要的对象。Dto主要应用于以下几处:

在Controller层,接口传参使用Dto对象来进行接收,无论参数个数多少,就算只有一个参数,也应当创建一个Dto对象进行接收。有人会问,为什么不用@RequestParam来做,简单来讲,一是不美观,二是维护困难。当参数过多的情况下,接口的一个括号里,会掉满了各类注解,各类对参数的设定。其次,如果对于接口参数新增或者减少的情况来讲,接口参数的维护会很难受。而如果使用Dto传参,我的维护成本仅仅只是Dto这个对象。无论是新手老手还是谁来接手维护该接口,大家都很明确,我接口是用的Dto来接受的参数,那么我就只需要去研究Dto这个对象有哪一些“属性”,而这些属性,又分别具有哪些约束,在对属性进行约束完毕之后,我接口只需要一个validation,便可进行参数校验,省去了繁杂的空判断以及一些特殊属性的校验。

在Service层,我们会处理许多复杂的逻辑,但最终的目的,是将处理好的持久化。如果将持久层的东西拿出来进行各类复杂的处理之后,就算是老程序员,也很容易将需要持久化的对象,进行错误返回,所以使用Dto对象,只需要把处理完的Dto进行copyBean即可无伤转换为持久化对象(Bo)。

三、Po(Persistent Object)

Po设计的意义就是让对象只做一件事,是用于Java后端与数据库之间进行交互,Po的命名不限制于XxxxPo,而应当与数据库表和字段所对应。与前端的交互只管交给Vo去做,数据处理层的交互只管交给Dto去做,与数据库的交互只管交给Po去做。MVC架构,每层的对象分工明确。

有人说Java是一门面向对象的语言,重要的就是“对象”,而使用Vo,Dto,Po的人,反而是丢弃了面向对象的一面大旗,因为他们搞不懂自己面向的对象到底是什么,所以一概成为Vo,Dto,Po。我想说,并不是这样。Vo的命名规则,应当是前端获取的资源+Vo构成。Dto的命名规则,应当是接口名称+Dto构成。而Po的命名规则,应当与数据库相对应。对于接口Vo而言不仅明确接口返回的对象是何种资源,而且满足Restful风格的Url(url表现出获取的资源是什么)。对于Dto而言,它就是专注于该接口的一个接受参数的对象。

对于这种对象的使用方式,管理起来也很简单,只需根据接口,就能够迅速的定位到自己想要的对象是什么,如果前端需要的字段多一条,那我只需要在Vo对象中加一个属性,在业务层处理好数据,set到Vo里面去。如果我在业务层的判断需要新的字段,那我只需要定位到对应的Dto对象中,添加需要的属性。如果不使用Vo,Dto,Po进行区分,我一个刚接手的新手程序员,我应该如何去判断这个对象是个什么对象呢?它是数据库对象吗?还是返回给前端展示的对象?还是说从持久层开始到视图层,我一直都使用的是同一个对象?这样的使用方式真的合适吗?如果前端所需要的新的字段,那我应当修改返回的“持久层对象”?这应当修改吗?显然不合理。

在Springboot+vue前后端分离盛行的时代,这种对象的使用和管理方式,我认为是非常值得推荐的。

为什么使用VO,DTO,BO相关推荐

  1. VO,DTO,BO,POJO,PO的概念介绍

    po: 1.po:popersistent object 持久对象,持久对象的意思指的是可以从内存中存储到关系型数据库中. 2.因此一个po对应的数据库中的每一条记录. pojo: 1. pojo:p ...

  2. VO的实际应用;后端接收前端传入的值;实体类转化VO;PO,VO,DTO,BO,DAO,POJO区别

    文章目录 各层转换流程 分层领域模型规约: 领域模型命名规约: 后端向前端传参 封装 前端向后台传参 封装 快速转换解决方案 参考 各层转换流程 分层领域模型规约: DO( Data Object): ...

  3. Java开发中的几种对象的说明(PO,VO,DTO,BO,POJO,DAO,SAO等)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象,也就是说只有属性和setter和getter方法.使用Hibernate来生成PO是不错的 ...

  4. Java 中的PO VO DTO BO

    PO 持久对象,数据: BO 业务对象,封装对象.复杂对象 ,里面可能包含多个类: DTO 传输对象,前端调用时传输 : VO 表现对象,前端界面展示. 当你业务足够简单时,一个POJO 也完全当做P ...

  5. PO VO DTO BO区别及用法

    PO: persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录. 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO: businessobjec ...

  6. bo dto java vo_java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    O/R Mapping 是 Object Relational Mapping (对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在 O/R Mapping 的世界里 ...

  7. Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

    Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分 PO:持久对象 (persistent object),po(persiste ...

  8. 一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO

    今日推荐 推荐一个 Java 接口快速开发框架干掉Random:这个类已经成为获取随机数的王者Docker + Intellij IDEA,提升 10 倍生产力!笑出腹肌的注释,都是被代码耽误的诗人! ...

  9. 领域模型命名规约【PO,VO,POJO,BO,DTO,DO,JavaBean】

    PO,VO,POJO,BO,DTO,DO,JavaBean 在这之前我先说一下,在阿里巴巴开发手册中有提到这种领域模型命名规约,即如下图: 下面是更加详细的介绍: po PO(Persistant O ...

  10. PO/BO/VO/DTO/POJO/DAO/DO

    文章目录 DO(Domain Object) DO(Data Object) PO VO BO DTO POJO DAO JavaBean EJB Entity 应用程序的分层设计 MVC 业务分层 ...

最新文章

  1. JS小数位保留两位小数
  2. thinkphp无法加载模块解决办法
  3. linux ssh服务的优化,SSH服务端配置、优化加速、安全防护
  4. USB相关结构体之struct usb_device
  5. linux下杀死进程(kill)的N种方法
  6. javascript操作符之new 也疯狂 (2)
  7. Qt文档阅读笔记-DTLS server解析
  8. NLB群集的两种操作模式-2
  9. 洛谷——P1739 表达式括号匹配
  10. 某人分析的70后,80后,90后
  11. 一般处理程序里使用session对象为null,未将对象引用到实例化
  12. vue项目中,网页地址栏添加小图标
  13. 【源码】基于MPPT算法的混合风能太阳能系统建模与仿真
  14. 25个很酷的jQuery倒计时脚本–添加动态计数器!
  15. LightBox -灯箱效果插件(非常漂亮) Jquery灯箱效果
  16. 高校wifi认证登录
  17. flutter 如何判断页面渲染完毕
  18. scala spark sql 获得分组后的分位点
  19. 首批!工信部下达2021年国家工业专项节能监察任务,涉及270 个数据中心(附名单)...
  20. 分布式锁,redisson是如何解决死锁问题

热门文章

  1. 智慧公安大数据人工智能
  2. openbsd停止mysql_英特尔处理器超线程功能被OpenBSD 停用,并爆bug
  3. CF1427F Boring Card Game
  4. 程序员叫啥名字_什么是资深程序员?看自“配”的网名就真相了!
  5. 网易云解锁配置(windows)
  6. 基于jsp+java+ssm的大学生缴费系统-计算机毕业设计
  7. PX4模块设计之十二:High Resolution Timer设计
  8. tomcat Web服务器目录结构和发布网站
  9. 《科尼龙作曲家》——简单易用又功能丰富的五线谱编辑和作曲软件
  10. 学习笔记——游戏打击感