java里面Dto对象跟VO的区别, 5C

看到项目有些地方返回到前端用VO有些用DTO想问下区别,
从前端接受参数是DTO我知道。

0

5个回答

不复制粘贴,写的通俗易懂一点。由于会分包分层,避免乱套。就有了这些对象类型
VO(value object)
用于返回给前端交互。传给前端的对象被称作VO(web层)。也就是前端调用你restful接口你返回的对象。

DTO(Data Transfer Object)
用于业务层(biz层)的处理

一般来说的流程就是
从数据库中取出的对象,比如是data ,那么就先需要转换成dataDTO处理数据。然后返回到restful前转换成需要的VO

纯手打,有不理解的问我,请采纳

2

VO与DTO的区别
既然DTO是展示层与服务层之间传递数据的对象,为什么还需要一个VO呢?对!对于绝大部分的应用场景来说,DTO和VO的属性值基本是一致的,而且他们通常都是POJO,因此没必要多此一举,但不要忘记这是实现层面的思维,对于设计层面来说,概念上还是应该存在VO和DTO,因为两者有着本质的区别,DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。

用一个例子来说明可能会比较容易理解:

例如Service层有一个getUser的方法返回一个系统用户,其中有一个属性是gender(性别),对于Service层来说,它只从语义上定义:1-男性,2-女性,0-未指定,而对于展示层来说,它可能需要用“帅哥”代表男性,用“美女”代表女性,用“秘密”代表未指定。说到这里,可能你还会反驳,在服务层直接就返回“帅哥美女”不就行了吗?对于大部分应用来说,这不是问题,但设想一下,如果需求允许客户可以定制风格,而不同风格对于“性别”的表现方式不一样,又或者这个服务同时供多个客户端使用(不同门户),而不同的客户端对于表现层的要求有所不同,那么,问题就来了。再者,回到设计层面上分析,从职责单一原则来看,服务层只负责业务,与具体的表现形式无关,因此,它返回的DTO,不应该出现与表现形式的耦合。
理论归理论,这到底还是分析设计层面的思维,是否在实现层面必须这样做呢?一刀切的做法往往会得不偿失,下面我马上会分析应用中如何做出正确的选择。

VO与DTO的应用
上面只是用了一个简单的例子来说明VO与DTO在概念上的区别,本节将会告诉你如何在应用中做出正确的选择。

在以下才场景中,我们可以考虑把VO与DTO二合为一(注意:是实现层面):

当需求非常清晰稳定,而且客户端很明确只有一个的时候,没有必要把VO和DTO区分开来,这时候VO可以退隐,用一个DTO即可,为什么是VO退隐而不是DTO?回到设计层面,Service层的职责依然不应该与View层耦合,所以,对于前面的例子,你很容易理解,DTO对于“性别”来说,依然不能用“帅哥美女”,这个转换应该依赖于页面的脚本(如JavaScript)或其他机制(JSTL、EL、CSS)
即使客户端可以进行定制,或者存在多个不同的客户端,如果客户端能够用某种技术(脚本或其他机制)实现转换,同样可以让VO退隐

以下场景需要优先考虑VO、DTO并存:

因为某种技术原因,比如某个框架(如Flex)提供自动把POJO转换为UI中某些Field时,可以考虑在实现层面定义出VO,这个权衡完全取决于使用框架的自动转换能力带来的开发和维护效率提升与设计多一个VO所多做的事情带来的开发和维护效率的下降之间的比对。

如果页面出现一个“大视图”,而组成这个大视图的所有数据需要调用多个服务,返回多个DTO来组装(当然,这同样可以通过服务层提供一次性返回一个大视图的DTO来取代,但在服务层提供一个这样的方法是否合适,需要在设计层面进行权衡)。

0

经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析。

得出的主要结论是:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于数据库中存储的数据(数据表),DTO对应于除二者之外需要进行传递的数据。

一、实体类

百度百科中对于实体类的定义如下:

实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。

根据以上定义,我们可以了解到,实体类有两方面内容,存储数据和执行数据本身相关的操作。这两方面内容对应到实现上,最简单的实体类是POJO类,含有属性及属性对应的set和get方法,实体类常见的方法还有用于输出自身数据的toString方法。

二、领域模型中的实体类

领域模型中的实体类分为四种类型:VO、DTO、DO、PO,各种实体类用于不同业务层次间的交互,并会在层次内实现实体类之间的转化。

业务分层为:视图层(VIEW+ACTION),服务层(SERVICE),持久层(DAO)

相应各层间实体的传递如下图

项目中我们并没有严格遵循这种传递关系,但这种和业务层次的关联对我们理解各实体类的作用是有帮助的。(我们没有接触到PO的原因,我理解为ORM对PO进行了封装)

以下是资料的原文,上图是基于此绘制的:

概念:

VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。

DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

模型:

   下面以一个时序图建立简单模型来描述上述对象在三层架构应用中的位置

l 用户发出请求(可能是填写表单),表单的数据在展示层被匹配为VO。

l 展示层把VO转换为服务层对应方法所要求的DTO,传送给服务层。

l 服务层首先根据DTO的数据构造(或重建)一个DO,调用DO的业务方法完成具体业务。

l 服务层把DO转换为持久层对应的PO(可以使用ORM工具,也可以不用),调用持久层的持久化方法,把PO传递给它,完成持久化操作。

l 对于一个逆向操作,如读取数据,也是用类似的方式转换和传递,略。

三、项目中的实体类

项目中常见的实体类有VO,DO和DTO,命名规则也常是以相应字符串结尾,如*VO.Java。但是DTO不总是遵循这个规则,而通常与他的用途有关,如写成*Query.Java,表示存储了一个查询条件。项目中实体类出现的业务层次也没有这么严格,例如我们可以在视图层就组装一个DO,也可以将一个VO从持久层传出来,所以与业务分层相关联的划分方法显得有些冗余。从项目代码中抽象出的理解是:VO对应于页面上需要显示的数据,DO对应于数据库中存储的数据,DTO对应于除二者之外需要进行传递的数据。

0

avaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 的属性。

VO即value object值对象
主要体现在视图的对象,对于一个WEB页面将整个页面的属性封装成一个对象。然后用一个VO对象在控制层与视图层进行传输交换。

DTO (经过处理后的PO,可能增加或者减少PO的属性):
Data Transfer Object数据传输对象
主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。

POJO(POJO是一种概念或者接口,身份及作用随环境变化而变化) :
POJO有一些private的参数作为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口
plain ordinary java object 简单java对象
即POJO是一个简单的普通的Java对象,它不包含业务逻辑或持久逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。
一个POJO持久化以后就是PO。
直接用它传递、传递过程中就是DTO
直接用来对应表示层就是VO

-1

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 的属性。
VO即value object值对象
主要体现在视图的对象,对于一个WEB页面将整个页面的属性封装成一个对象。然后用一个VO对象在控制层与视图层进行传输交换。
DTO (经过处理后的PO,可能增加或者减少PO的属性):
Data Transfer Object数据传输对象
主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。
POJO(POJO是一种概念或者接口,身份及作用随环境变化而变化) :
POJO有一些private的参数作为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口
plain ordinary java object 简单java对象
即POJO是一个简单的普通的Java对象,它不包含业务逻辑或持久逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。
一个POJO持久化以后就是PO。
直接用它传递、传递过程中就是DTO
直接用来对应表示层就是VO

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
VO DTO 实体类的区别 java
java简单基础 需要的了解一下 我们大家还是有必要去区分的
视图对象(VO、DTO)的应用!
NULL 博文链接:https://eddysoft.iteye.com/blog/1941484
J2EE基础知识之DTO,VO,PO,DO等定义
J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义
自己实现的Android中将任意实体类(Entity、vo、dto、Model)对象(object)转为Json字符串的一个类
自己实现的一个Android中将任意实体类对象转为Json的工具类。适用于Android开发。
Java Web开发 之VO、PO、DTO等收集
J2EE开发人员必须知道 Java Web开发中VO、PO、DTO、POJO代表含义。
自动生成vo类(mysql数据库为例)
根据数据库中表的字段自动生成java中的vo类,方便调用
java术语(PO/POJO/VO/BO/DAO/DTO)
java术语(PO/POJO/VO/BO/DAO/DTO)
vo bo po dto dao区别
本人以前搞不懂这些o的区别,特意查找资料总结了一下,希望也可以帮到其他人
AutoMapper完成Dto与Model的转换
AutoMapper完成Dto与Model的转换
数据库表转实体类和DTO
该工具可以对接数据库,将数据库中的表转换为java的实体类和DTO类。
mybatis自动生成mapping文件、vo和dao接口
使用说明 1.打开命令窗口 cmd 回车 2.进入指定盘符 输入 d: 回车 3.进入lib目录 cd AutoGeneratorMapping\WebRoot\WEB-INF\lib 回车 4.输入脚本 java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite 回车 5.MyBatis Generator finished successfully. 表示成功生成mapping、model等文件
Dto,javaBean,带注释自动生成
项目中,自动生成javabean对象和Dto,所有的项目加注释
po与vo区别.doc
po与vo区别.docpo与vo区别.docpo与vo区别.doc
Dto转实体类 AutoMapper
AutoMapper工具的使用 Dto 与 实体类 的值相互转换
Ibatis数据表对象自动生成器
Ibatis<br>数据表对象自动生成器<br>自动生成针对配置好的每个表的XML文件和VO(DTO)文件
Java的几种对象(PO-VO-DAO-BO-POJO)解释
Java的几种对象(PO-VO-DAO-BO-POJO)解释
实体类跟数据传递类转换类TypeCast.java (供参考)
实体类跟数据传递类转换类TypeCast.java (供参考) 实体类跟数据传递类转换类TypeCast.java (供参考)实体类跟数据传递类转换类TypeCast.java (供参考)
java DTO 详解
java DTO 详解 java DTO 详解 java DTO 详解 java DTO 详解
反射实现的bean转换类
反射实现的bean转换类,配合类型转换器,告别所有bean转vo,bean转dto,dto转bean,vo转bean,什么构造器转换之类的,简直浪费程序员生命
Ulead GIF Animator 5教程5对象的管理
Ulead GIF Animator 5教程5对象的管理
导入Excel快速生成DTO
导入Excel快速生成javaBean,下载即可享用,大大便捷开发效率
快速生成DTO
通过导入Excel模板快速生成DTO,简单易用,下载即可打开使用,加快开发效率
EF+Mapper结合使用实现Dto到实体类再到数据的(框架模型基础实现)
EF+Mapper结合使用实现Dto到实体类再到数据的(框架模型基础实现)
xsd生成javaBean
根据xsd文件一键生成javaBean,无需引用任何其他配置,所有依赖jar包已经完整提供
ResultDTO返回封装工具类
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //
feignclient发送get请求使用dto接收参数demo
feignclient发送get请求使用dto接收参数demo
java根据数据库自动生成vo 类
NULL 博文链接:https://joynet007.iteye.com/blog/972596
bo,vo,po的区别
介绍vo,bo,po的区别。看其他网站收集的资料。
nc57保存VO的几种方法
nc57保存VO的几种方法sdafsgsfgddsddfsfddfdewdddfdfdfdfa
VO生成工具(set/get),
VO生成工具,带操作说明,很方便,会根据输入的属性自动生成set/get方法(还带注释)
poi jxl 生成EXCEL 报表
poi jxl 生成EXCEL 报表 POI 用的JAR poi-3.6-20091214.jar jxl 用到的jar jxl-2.6.jar
java对象与json转换jar包(亲测可用)
包含java与json相互转换的所有jar包, commons-beanutils-1.8.3 commons-collections-3.2.1 commons-lang-2.6 commons-logging-1.2 ezmorph-1.0.6 json-lib-2.4
使用json-lib将java对象转换成json字符串
NULL 博文链接:https://yxgyh.iteye.com/blog/392657
jsp VO 循环显示
jsp VO 循环显示,取vo数据,分隔,展示到table里面
用new创建对象和直接定义的区别
本文章主要讲述了用new创建类对象和直接定义类对象的区别与联系,很好地阐述了二者的关系。
关于java分页的封装
还有部分代码没有了,主要在Vo定义一个pager 在student类里继承了basic类
JAVA NIO关于JAVA流和通道方面
JAVA流和通道方面的知识, 还有一本是讲述JAVA流的,不过貌似暂时没有中文版本,看完之后,可以配合着在JAVA的源码在看。
java 导出excel(单、多工作薄<poi、jxl>)
我在写这个功能的时候,找了好多资料,都没找到合适的,下面这个是我自己写的,有不到位的地方请原谅,在此分享下。
简单的EntityFramework4.3+三层+DTO 简单Demo
简单的EntityFramework4.3+三层+DTO,如果需要简化版的,我的资源里有一个不含DTO的版本。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、默认数据的初始化 4、实体类的增删改查,包括分页查询和多重条件查询 5、实体类与DTO的转换,Mapping配置 需要的DLL文件都在packages文件夹中
Kinect2API文档
Kienct2的开发介绍,里面运用SDK的版本为2.0,跟1.8有本质的区别
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java大数据跟机器学习 java大数据跟机器学习