简单理解VO、DTO、PO、DO的概念、区别

概念

VO(View Object) 视图对象,用于表现层,对指定页面或者组件需要的数据进行封装.
DTO(Date Transfer Object) 数据传输对象,用于表现层与服务层进行数据传递,简单来说就是接受服务层需要数据.
DO(Domain Object) 领域对象,从现实中抽取出的业务实体.
PO(Persistent Object) 持久化对象,与数据库字段一一对应的映射关系,数据库字段对应PO的属性

关系如下图所示
  1. 用户发送请求(或者表单)匹配数据VO中
  2. 服务层将VO转换为方法所需要的DTO对象
  3. 服务层根据DTO创建DO对象
  4. 服务层将DO转化为持久层需要的PO对象

简单描述VO/DTO/DO/PO四者之间的区别

  1. 从设计层面上说,VO代表显示层展示的数据,DTO代表服务层需要接受和返回的数据,本就各司其职,但两者数据有大量甚至完全一致的数据,因此我们在实际开发中经常会发现共同使用一个数据对象,虽然不太符合设计规范.
  2. 从概念上讲,DTO是服务层与显示层的数据传输对象,DO是对具体的业务主体的抽象,两者最常见的使用区别场景,首先DO基本包含所有数据,有时候用户请求服务时,需要返回数据,按道理DO已经足够满足数据的返回要求,但是有一些数据我们不想让用户看见,这个时候就需要DTO对象.
  3. PO和DO存在差异的情况少之又少,PO是持久层的数据,DO是对业务实体的抽象,一个PO可以对应多个DO,反之亦然,根据具体使用常见而定.

简单理解VO、DTO、PO、DO的概念、区别相关推荐

  1. PO,BO,VO,DTO和POJO的概念区分

    PO,BO,VO,DTO和POJO的概念区分 文章目录 PO,BO,VO,DTO和POJO的概念区分 POJO(plain ordinary java object) VO(View Object) ...

  2. 教你简单理解分布式与传统单体架构的区别

    教你简单理解分布式与传统单体架构的区别 原文:教你简单理解分布式与传统单体架构的区别 分布式是一种系统架构方式,而在分布式系统中一般基于中间件进行开发,消息中间件是分布式系统中比较核心的中间件之一.这 ...

  3. vo,dto,po的区别

    pojo:对应数据表的实体类 pojo有人也写为po,entity,domain:代表系统中的一个具体的实体,如用户.订单.产品等.通常是将其映射到数据库表的对应实体,包含该实体的属性和相关方法. 个 ...

  4. PO BO VO DTO POJO DAO DO概念解读

    假如有一张user表,里面有几个字段: user_id user_name pass_word create_time dept_id 假设就这么多吧,一张很基础的表,那么对应Java的写法就是一个类 ...

  5. java do对象_java一些对象概念扫盲帖(DO VO DTO PO)

    资料来源:http://virusswb.blog.51cto.com/115214/458636 BO:Business Object,业务对象.主要是承载业务数据的实体.处理业务逻辑的时候使用,数 ...

  6. 简单理解sticky定位与fixed定位的区别

    fixed:固定定位,相对于可视窗口定位,一但使用top,left绑定后,无论怎么滚动可视窗口区域(也就是滑动滚动条),它的位置都不会发生变化 sticky:粘性定位,相当于是相对定位和固定定位的结合 ...

  7. 简单理解 word-wrap、word-break 和 white-space 的区别

    不设置word-warp和word-break的时候,一行单词,超过了容器的宽度是,会将最后一个单词下移一行进行显示,如果下移的那个单词长度还是超过了容器宽度,则会溢出 word-wrap 设置wor ...

  8. 关于VO,BO,PO,DO,DTO的简单理解

    一.关于VO,BO,PO,DTO的简单理解 VO(Value Object)值对象 值对象:每一个字段与视图层所需要的字段对应 ,可以理解为vo里面的字段,和前端请求参数里面的字段相对应 DTO(Da ...

  9. Android:安卓学习笔记之共享元素的简单理解和使用

    Android 共享元素的简单理解和使用 1 .基本概念 2.基本使用 1.Activity to Activity跳转实现 1.1.使用步骤 1.2.案例说明 2.Fragment to Fragm ...

最新文章

  1. Target runtime Apache Tomcat v7.0 is not defined.
  2. oracle远程连接配置
  3. 202701算法_冒泡排序
  4. C语言调用WIN32 API学习之6鼠标与键盘响应
  5. HDU4669_Mutiples on a circle
  6. SAP CRM One Order框架里旧式的索引表设计原理
  7. Java 8新特性——default方法(defender方法)介绍
  8. 【OpenCV】OpenCV函数精讲之 -- 通道合并:merge()函数
  9. mysql应用层透明扩展_MySQL高扩展和高可用
  10. Web前端初学者,需用了解的7大HTML知识点
  11. 第1本书:CCIE Practical Studies, Volume I-第13天
  12. 中国现代远程与继续教育网 统考 大学英语(B)考试大纲
  13. ECharts 实现地图功能
  14. C语言从入门到不放弃---编程环境的搭建到上手写代码
  15. 摇身一变,ADSL猫进化为无线路由器
  16. 【无标题】Ds1302驱动代码编写并在Lcd1602液晶显示
  17. 千纸鹤(小纸片)全套源码
  18. win10 suse linux,Windows 10现已支持安装SUSE Linux子系统 附安装教程|蓝点网
  19. 8年iOS架构师告诉你,为什么iOS现在不行了!
  20. python scripts文件夹里面没有pip.exe怎么办?

热门文章

  1. 如何构建计算机家庭组,如何创建和管理 Windows 10 家庭组
  2. android 录音异常setAudioSource failed
  3. MongoDB、ES、Redis、HBase四种数据库的简单区别
  4. 语音识别之HTK入门(一)HTK的下载配置
  5. 猪圈密码python脚本实现
  6. python使用目录_python目录操作一
  7. mysql去除全角空格_PHP输出全角空格,导致页面布局混乱
  8. 医疗器械供应链企业医疗器械管理软件发展,得出什么答案?
  9. node-sass版本不兼容问题(已解决)
  10. 华为obs python sdk 下载图片报错:NoSuchKey