实体类(VO,DO,DTO)的划分

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

从领域建模中的实体划分、项目中的实际应用情况两个角度,对这几个概念进行简析。

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

一、实体类

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

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

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

实体类(VO,DO,DTO)的划分
 

 

二、领域模型中的实体类

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

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

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

实体类(VO,DO,DTO)的划分

 

项目中我们并没有严格遵循这种传递关系,但这种和业务层次的关联对我们理解各实体类的作用是有帮助的。(我们没有接触到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对应于除二者之外需要进行传递的数据。

 

PO(persistant object) 持久对象

 

在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。

DO(Domain Object)领域对象

就是从现实世界中抽象出来的有形或无形的业务实体。

TO(Transfer Object) ,数据传输对象

在应用程序不同 tie( 关系 ) 之间传输的对象

DTO(Data Transfer Object)数据传输对象

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

VO(value object) 值对象

通常用于业务层之间的数据传递,和 PO 一样也是仅仅包含数据而已。但应是抽象出的业务对象 , 可以和表对应 , 也可以不 , 这根据业务的需要 。用 new 关键字创建,由 GC 回收的。

BO(business object) 业务对象

从业务模型的角度看 , 见 UML 元件领域模型中的领域对象。封装业务逻辑的 java 对象 , 通过调用 DAO 方法 , 结合 PO,VO 进行业务操作。 business object: 业务对象 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。 比如一个简历,有教育经历、工作经历、社会关系等等。 我们可以把教育经历对应一个 PO ,工作经历对应一个 PO ,社会关系对应一个 PO 。 建立一个对应简历的 BO 对象处理简历,每个 BO 包含这些 PO 。 这样处理业务逻辑时,我们就可以针对 BO 去处理。

POJO(plain ordinary java object) 简单无规则 java 对象

纯的传统意义的 java 对象。就是说在一些 Object/Relation Mapping 工具中,能够做到维护数据库表记录的 persisent object 完全是一个符合 Java Bean 规范的纯 Java 对象,没有增加别的属性和方法。我的理解就是最基本的 Java Bean ,只有属性字段及 setter 和 getter 方法!。

DAO(data access object) 数据访问对象

是一个 sun 的一个标准 j2ee 设计模式, 这个模式中有个接口就是 DAO ,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和 PO 结合使用, DAO 中包含了各种数据库的操作方法。通过它的方法 , 结合 PO 对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合 VO, 提供数据库的 CRUD 操作.

 

转自:https://blog.csdn.net/wangxin1982314/article/details/51954264

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS新建站点服务器,localhost能登录但是IP访问登录不了。

IIS服务器新建站点之后,浏览页面,服务器本地是可以登录,但是localhost换成IP就无法访问。其他站点IP却可以访问。 1.如果浏览直接失败,说明端口号需要更换。 2.如果出现IP不能访问,localhost能访问,需要在高…

eclipse问题_Alt+/不给提示,只补充代码问题的解决方案

今天用eclipse敲代码的时候遇到的问题 我还以为是冲突什么的 还重新装了软件 最后才发现原来是快捷键设置的问题 解决方案: 1:打开菜单window→Preferences,然后在窗口的左侧树选择General->Keys 2:在下图中的5框的地方输入“w…

领域驱动设计:浅析 VO、DTO、DO、PO 概念、区别、用处

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 本篇文章主要讨论一下我们经常会用到的一些对象:VO、DTO、DO和PO。 由于不同的项目和开发人员有不同的命名习惯&#xff0c…

案例:隐秘而低调的内存泄露(OOM)

内存泄露测试的整个过程如下:在手机里启动被测APP并打开DDMS。在DDMS中选中【com.example.android.hcgallery】之后单击按钮【show heap updates】,然后切换到标签页【VM Heap】,再单击按钮【Cause GC】。不断操作APP,并观察Heap。…

一名IT从业者的英语口语能力成长路径

这篇文章是我最近十天口语系列文章的合辑,文章比较长,一万五千余字。但是系统化地归纳了自己十多年的英语尤其是口语方面的学习经历与总结思考。我不是个纯粹的英语专业学生,我甚至不是任何英语相关专业的学生,但是我和英语却有着…

解决:SpringBoot 错误:Caused by: org.yaml.snakeyaml.scanner.ScannerException

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 错误: Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next tokenfound character that cannot s…

OpenCL用于计算机领域的13个经典案例

摘要:当使用加速器和OpenCL时,哪种类型的算法更加快速?来自弗吉尼亚理工大学的Wu Feng教授和他的团队例举了一份算法列表,分享了OpenCL常被用于计算机领域的13个经典案例。 哪种算法可以最好的映射GPU及矢量处理器呢?…

版本控制:集中式(SVN) vs 分布式(GIT)

Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是…

Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件

为什么80%的码农都做不了架构师?>>> 作者| 阿里云智能事业群高级开发工程师 元毅 Knative 主要由 Build、Serving 和 Eventing 三大核心组件构成。Knative 正是依靠这三个核心组件,驱动着 Knative 这艘 Serverless 巨轮前行。下面让我们来分…

树莓派基金会来号召用键盘生物学家研究企鹅

伦敦动物学会(Zoological Society of London)于2014年,与伍兹霍尔海洋研究所和牛津大学等组织合作监控企鹅的计划Penguin Lifelines有了新进展,伦敦动物学会现与其他动物保护组织合作Penguin Watch项目,邀请民众在网上…

Git 版本回退

现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. Git is free software distributed under the GPL.然后尝…

AMD院士站台 异构计算与OpenCL编程师资培训首站清华开讲

摘要:2013年10月14日,“2013年异构计算与OpenCL编程师资培训”在清华大学召开。本活动邀请到AMD、Khronos Group及清华大学的多位并行计算领域专家,与参会者共同探讨OpenCL异构开发和优化技术。 2013年10月14日,由教育部科技发展…

【问题记录】RIDE-1.7.3.1控制台及日志中文乱码处理

RIDE-1.7.3.1运行结果界面展示: 解决方法参考链接: https://blog.csdn.net/panda62/article/details/88535376 转载于:https://www.cnblogs.com/quietCorner/p/11046656.html

GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构

摘要:GPU Saturday技术沙龙在北京3WCoffee成功举办。本次活动邀请AMD资深技术人员及清华大学项目研究员就AMD最新的GCN架构、GPU加速计算在挖掘比特币、典型图像算法、深度神经网络算法等领域的分析与应用展开深入讨论。 [CSDN报道] 9月5日,GPU Saturda…

AMD发布APPML源码,构建clMath库

摘要:日前,AMD将加速并行处理数学库(Accelerated Parallel Processing Math Library简称APPML)开源,内容包含了BLAS和FFT的OpenCL实现,项目托管在GitHub上,命名为clMath,该项目基于A…

CSS基础学习 18.CSS多列

四种常见的浏览器内核: 转载于:https://www.cnblogs.com/songsongblue/p/11050210.html

OpenCL 2.0发布,带来更强悍的异构计算能力

摘要:Khronos Group本周一发布了OpenCL 2.0,可为显示芯片提供更好的独立性,以便能为通用软件计算出更大的力。该组织已经发布了2.0的临时标准,预计正式版本的发布要等到6个月以后。 Khronos小组于本周一(7月22日&…

从一个OutOfMemoryError 学会了分析Java内存泄漏问题

从一个OutOfMemoryError 学会了分析Java内存泄漏问题 以前都是好好的,最近出现了 oom。 问题 开始是: java.lang.OutOfMemoryError: Java heap space 2019-06-14 11:02:41.678 ERROR 13789 --- [nio-8082-exec-3] c.e.p.s.c.c.core.ELDictionaryControll…

Hadoop+GPU强强联手的性能探索

摘要:Hadoop并行处理可以成倍地提高性能,GPU也日益成为计算任务的重要分担者,Altoros Systems研发团队一直致力于探索HadoopGPU的可能性,以及在实际的大规模系统中的实现,这篇文章就是他们的部分研究成果。 Hadoop并行…

Vue Google浏览器插件 Vue Devtools无法使用的解决办法

1.插件安装不必多说 一定要用Vue.js 开发版 Vue.min.js 在控制面板就不会显示 2.本地调试 用的是file://协议 修改插件允许访问文件网址 打上对勾 转载于:https://www.cnblogs.com/116970u/p/11052987.html