技术公众号: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. UITableView学习笔记
  2. R语言数据热力图绘制实战(基于原生R函数、ggplot2包、plotly包)
  3. python正则表达式——regex模块
  4. 破解YouTube、Facebook推荐系统背后的那些算法
  5. Windows函数错误处理
  6. 阿里巴巴的程序员们来相亲啦!择偶标准大公开,瞬间吸引一众家长
  7. hbase中为何不能向表中插入数据_生产环境使用HBase,你必须知道的最佳实践 | 百万人学AI...
  8. Egret 之 消除游戏 开发 PART 6 Egret elimination game development PART 6
  9. 字节跳动面试分享:java从入门到精通第五版答案位置
  10. 第6堂视频课:看到词句就会读-下
  11. 干货 | 携程平台化常态化数据治理之路
  12. 无锡科技职业学院院长孙兴洋应邀到美和易思作专题讲座
  13. 编译原理 3.28 作业
  14. FFmpeg视频处理入门教程----从安装到使用(Linux版)
  15. Shader编程学习笔记(五)—— Fixed Function Shader 1
  16. 信息隐藏——二值图像的信息隐藏
  17. c#物联网_基于C#实现日志记录与SQL SERVER的双向存储工控数字化之旅
  18. gettimeofday 函数
  19. 【若依RuoYi短信验证码登录】汇总
  20. 1024程序员节!!

热门文章

  1. 简述 maven 命令 package、install、deploy 的区别
  2. SharpZipLib 压缩ZIP导出
  3. Linux下python安装升级详细步骤 | Python2 升级 Python3
  4. 研究人员发现:基于文本的AI模型容易受到改述攻击
  5. Python数据可视化2018:数据可视化库为什么这么多?
  6. CentOS新增用户并授予sudo权限
  7. 使用 NodeJS+Express+MySQL 实现简单的增删改查
  8. Python大神告诉你,学习Python应该读哪些书!
  9. 操作系统常考知识点总结(1)
  10. Linux运维工程师面试-部分题库