技术公众号:Java In Mind(Java_In_Mind),欢迎关注!

背景

我相信,刚开始学习接触企业代码的时候,一定会发现,工程中充斥着各种XO:DO、VO、DTO、DAO,还有各种名词:POJO,JavaBean,Domain等等,这些貌似看起来都一样,又好像用在不同的地方,记得之前一个前端同事调侃说:“我不想学Java,各种OOO,脑壳疼!”,这里结合自己的理解对这几个名词做些介绍。

何为POJO

POJO(Plain Ordinary Java Object),即简单Java对象,就是一个我们最常见的普通Java对象,这个概念是被大家叫出来的,它具有一些属性,然后提供对应的getter和setter,如下:

public class Foo {

private String name;

private String type;

public String getName(){

return this.name;

}

public void setName(String name){

this.name = name;

}

public String getType(){

return this.Type;

}

public void setType(String type){

this.type = type;

}

}

何为JavaBean

JavaBean,可序列化的POJO,sun在早期有对其规范(JavaBeans Spec),它是Java中的可重用组件,主要规范约定如下:JavaBean为公共类,并且具有一个空构造函数

所有属性为私有属性,提供getter和setter,不应该有公共属性

实现序列化接口:java.io.Serializable

JavaBean已经成为Java的一种规范,也是Java社区的共同语言,许多工具框架也是遵循JavaBean的规范的,例如,Spring的BeanUtils,一些Json工具都是基于JavaBean的规范来实现的,这些都是基于约定,所以也有人把JavaBean叫为可以持久化的POJO。

何为DO

DO(Domain Object),领域对象,也就是ORM框架中对应数据库的对象,业务实体,例如,对现实世界中的用户建模,抽象出来的DO可以叫为UserDO,通常情况下它用于与数据库的数据交互,通常也是一个JavaBean。

何为PO

PO(Persistent Object),持久化对象,主要用于持久化层,与数据库对应,通常也是ORM框架中的实体对象,例如,使用JPA时候的Entity与数据库表做映射,通常是一个JavaBean。

何为DTO

DTO(Data Transfer Object),数据传输对象,顾名思义就是用于传输数据的对象,通常用于处于不同架构层次或者不同子系统之间的数据传递,或者用于外部接口参数传递,以便提供不同粒度不同信息的数据,以免造成困惑干扰,通常也是一个JavaBean。

何为VO

VO(Value Object),就是用于保存数据的对象;在提供给页面使用的时候,也有人解释为View Object,就是对应页面展示数据的对象。

何为DAO

DAO(Data Access Object),数据访问对象,与数据库做交互的对象,提供不同的接口访问数据库来实现对数据库的操作,而接口使用的数据交互通常就是PO或者DO,通过它可以使用面向对象的方式来与数据库交互。

总结DO、PO、VO、DTO等其实都是一个JavaBean,只是应用的范围不同,表示的意义不同,而这些不同是Java这么多年来形成的一种约定,这种习惯形成Java程序员之间一种共识

DO和PO大部分时间是一样的,不过PO更倾向于有状态的对象,例如,使用Hibernate的时候,通过DAO操作过的对象会被框架所持有,如果一旦对其操作,在Session关闭的时候会写回数据库,这个时候使用PO就要非常小心,特别是与其他业务层交互的时候,最好转成DTO或者VO提供数据,不能把持久化对象暴露出去,不然可能会导致数据被修改

在使用这类对象的时候,我们还是要明白其意义,然后在合适的场景使用,毕竟这是Java形成的通用语言,想要读懂他人代码就要理解,想要他人能读懂自己的代码就要遵循

dto 是只给前端需要的数据吗_DO、VO、DTO...XXOO,你弄明白了么相关推荐

  1. dto 是只给前端需要的数据吗_解决消息队列的数据积压很难?其实只需要这三招...

    1 概述 最近生产环境的消息通知队列发生了大量的数据积压问题,从而影响到整个平台商户的交易无法正常进行,最后只能通过临时关闭交易量较大的商户来缓解消息队列积压的问题,经线上数据分析,我们的消息队列在面 ...

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

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

  3. 前端websocket获取数据后需要存本地吗_是什么让我放弃了restful api?了解清楚后我全面拥抱GraphQL...

    GraphQL初步认识 背景 REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史.它的简单易用性,可扩展性, ...

  4. 前端websocket获取数据后需要存本地吗_是什么让我放弃了Restful API?了解清楚后我全面拥抱GraphQL!...

    背景 REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史.它的简单易用性,可扩展性,伸缩性受到广大Web开发 ...

  5. SpringMVC(二)——转发和重定向、处理前端请求的数据(普通字符串/对象)

    文章目录 1. 转发和重定向 2. 处理前端请求的数据 2.1 普通字符串 2.2 对象 1. 转发和重定向 转发:url不会发生变化 (查询前端固定模板的数据) @RequestMapping(&q ...

  6. 前端之模拟数据 - HackerVirus - 博客园

    阅读目录 玩转前端之模拟数据 回到目录 玩转前端之模拟数据 博客园主页:http://www.cnblogs.com/handoing/ 是否还在为前端模拟数据头疼? 是否还在为后端返回数据格式较多内 ...

  7. 前端转行大数据?没必要

    文/北妈 阅读本文需要 4.5分钟 一最近又有读者,问我要不要转去学大数据,好像前端和大数据一点不沾边.... 说实话我是无语的 文长,需耐心看完,读时有耐心,看完有信心. 这几年大数据和机器学习一直 ...

  8. java mockserver搭建_mockjs,json-server一起搭建前端通用的数据模拟框架教程

    无论是在工作,还是在业余时间做前端开发的时候,难免出现后端团队还没完成接口的开发,而前端团队却需要实现对应的功能,不要问为什么,这是肯定存在的.本篇文章就是基于此原因而产出的.希望对有这方面的需求的同 ...

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

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

最新文章

  1. 漫话:如何给女朋友解释什么是单例模式?
  2. python数据结构视频百度云盘_数据结构与算法Python视频领课
  3. java成果_JAVA WEB期末项目第二阶段成果
  4. python在福州能找到工作吗_如果只会Python能不能找到工作
  5. 某些安卓手机在Mac系统下无法通过数据线连接ADB(安卓手机USB双模式)解决方案...
  6. 7.6 C程序的存储空间布局
  7. 正在修复磁盘怎么取消
  8. java 计算器 下载_那里可以下载到JAVA编的计算器程序??
  9. 从用户的角度看解决方案
  10. Vista下将Area效果应用到整个窗体
  11. ThreadLocal源码学习
  12. BZOJ 3097: Hash Killer I
  13. 3-arm裸机存储器控制器之SDRAM
  14. Mybatis应用学习(4)——延迟加载
  15. [CVPR 2020] D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features
  16. python升级到3.7版本安装pyaudio
  17. 初探Log4j2-yaml配置坑
  18. 手把手教你使用Python操控手机微信app(最新教程)
  19. 【Try to Hack】fiddler
  20. srtedit制作CMCT风格字幕

热门文章

  1. mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )
  2. Ubuntu链接服务器
  3. Springcloud 引导上下文
  4. springboot和quartz整合实现动态定时任务(持久化单节点)
  5. Clipboard.js实现点击自动复制内容的功能
  6. Android 通信 EventBus
  7. SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
  8. CreateThread函数
  9. mysql用户的权限分配
  10. Centos7-Lvs+Keepalived架构实验详解