IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 为什么使用VO,DTO,BO -> 正文阅读

[Java知识库]为什么使用VO,DTO,BO

为什么使用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前后端分离盛行的时代,这种对象的使用和管理方式,我认为是非常值得推荐的。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:22:34  更:2022-04-22 18:24:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:22:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码