看过类似的问题:

  • JavaBean和POJO有什么区别?
  • POJO(普通的旧Java对象)和DTO(数据传输对象)之间有什么区别?

您还可以告诉我使用它们的上下文吗? 还是他们的目的?


#1楼

Java Bean与EJB不同。

Java 1.0中的JavaBeans规范是Sun尝试允许在看起来像VB的IDE中操纵Java对象的方法。 对于合格为“ Java Bean”的对象,制定了一些规则:

  1. 默认构造函数
  2. 遵循正确命名约定的私有数据成员的获取器和设置器
  3. 可序列化
  4. 也许其他人我忘记了。

EJB后来问世。 它们将分布式组件和事务模型结合在一起,并在管理线程,池化,生命周期和提供服务的容器中运行。 它们与Java Beans相去甚远。

DTO是在Java上下文中出现的,因为人们发现EJB 1.0规范对数据库太“闲谈”了。 人们不必将每个数据元素都进行往返,而是将它们打包成Java Bean并运送到周围。

POJO是对EJB的一种反应。


#2楼

DTO与VO

DTO-数据传输对象仅仅是用于在层和层之间传输数据的数据容器。

比喻:
具有属性用户名,密码和电子邮件ID的简单注册表单。

  • 当此表单在RegistrationServlet文件中提交时,您将获得从视图层到业务层的所有属性,然后在其中将属性传递给Java Bean,然后传递给DAO或持久层。
  • DTO帮助将属性从视图层传输到业务层,最后到持久层。

DTO主要用于有效地跨网络传输数据,甚至可能从JVM到另一个JVM。

DTO通常是java.io.Serializable为了跨JVM传输数据。

VO-值对象[1] [2]本身表示一组固定的数据,并且类似于Java枚举。 值对象的身份基于其状态而不是对象的身份,并且是不可变的。 真实的示例是Color.RED,Color.BLUE,SEX.FEMALE等。

POJO与JavaBeans

[1] POJO的Java-Beanness是,所有私有属性都可以通过符合JavaBeans约定的公共getter和setter进行访问。 例如

    private String foo;public String getFoo(){...}public void setFoo(String foo){...};

[2] JavaBeans必须实现Serializable并且具有无参数构造函数,而在POJO中则没有这些限制。


#3楼

JavaBeans

JavaBean是遵循Sun定义的JavaBeans约定的类。 Wikipedia很好地总结了什么是JavaBean :

JavaBean是Java的可重用软件组件,可以在构建器工具中直观地对其进行操作。 实际上,它们是用Java编程语言编写的,符合特定约定的类。 它们用于将许多对象封装到单个对象(bean)中,以便可以将它们作为单个bean对象而不是多个单个对象传递。 JavaBean是可序列化的Java对象,具有一个null构造函数,并允许使用getter和setter方法访问属性。

为了充当JavaBean类,对象类必须遵守有关方法命名,构造和行为的某些约定。 这些约定使拥有可以使用,重用,替换和连接JavaBean的工具成为可能。

所需的约定为:

  • 该类必须具有公共默认构造函数。 这样可以在编辑和激活框架内轻松实例化。
  • 必须遵循标准命名约定,使用get,set和其他方法(所谓的accessor方法和mutator方法)访问类属性。 这样可以轻松自动地检查和更新框架中的Bean状态,其中许多框架都包含针对各种类型的属性的自定义编辑器。
  • 该类应可序列化。 这允许应用程序和框架以独立于VM和平台的方式可靠地保存,存储和还原Bean的状态。

因为这些需求主要通过约定而不是通过实现接口来表达,所以某些开发人员将JavaBeans视为遵循特定命名约定的Plain Old Java Object。

POJO

普通的旧Java对象或POJO是最初引入的一个术语,用于指定一个简单的轻量级Java对象,而不是实现任何javax.ejb接口,而不是重量级的EJB 2.x(特别是实体Bean,无状态会话Bean并不是那么糟糕的IMO)。 。 今天,该术语用于任何没有多余东西的简单对象。 同样,维基百科在定义POJO方面做得很好:

POJO是Plain Old Java Object的首字母缩写。 该名称用来强调所讨论的对象是普通的Java对象,而不是特殊的对象,尤其不是Enterprise JavaBean(特别是在EJB 3之前)。 这个词是2000年9月由Martin Fowler,Rebecca Parsons和Josh MacKenzie创造的:

“我们想知道为什么人们不反对在他们的系统中使用常规对象,并得出结论,这是因为简单的对象缺少奇特的名称。所以我们给了他们一个名称,并且非常流行。”

对于未使用新功能的技术,例如电话中的POTS(普通旧电话服务)和C ++中定义但仅使用C语言功能的PODS(普通旧数据结构),该术语延续了较旧术语的模式。和Perl中的POD(普通旧文档)。

该术语很可能已被广泛接受,因为需要与复杂的对象框架形成对比的通用且易于理解的术语。 JavaBean是可序列化的POJO,具有无参数构造函数,并允许使用getter和setter方法访问属性。 Enterprise JavaBean不是单个类,而是整个组件模型(同样,EJB 3降低了Enterprise JavaBeans的复杂性)。

随着使用POJO的设计变得越来越普遍,出现了为POJO提供框架中使用的某些功能以及可以选择哪些功能领域的更多选择的系统。 Hibernate和Spring是示例。

价值对象

值对象或VO是诸如java.lang.Integer保存值的对象(因此为值对象)。 对于更正式的定义,我经常参考Martin Fowler对Value Object的描述:

在《企业应用程序体系结构模式》中,我将值对象描述为一个小对象,例如货币或日期范围对象。 它们的关键特性是它们遵循值语义而不是引用语义。

您通常可以告诉他们,因为它们的相等性概念不是基于身份的,而是如果两个值对象的所有字段都相等,则它们相等。 尽管所有字段都相等,但是如果子集是唯一的,则无需比较所有字段-例如,货币对象的货币代码足以测试相等性。

一般的启发式方法是价值对象应该完全不可变。 如果要更改值对象,则应使用新对象替换该对象,并且不允许更新该值对象本身的值-可更新的值对象会导致混叠问题。

早期的J2EE文献使用术语“值对象”来描述不同的概念,我称之为数据传输对象 。 此后,他们改变了用法,改用术语“ 传输对象” 。

您可以在Wiki和Dirk Riehle的有价值的对象上找到更多的好材料。

数据传输对象

数据传输对象或DTO是EJB引入的(反)模式。 它不是在EJB上执行许多远程调用,而是将数据封装在可以通过网络传输的值对象中:数据传输对象。 维基百科对数据传输对象有一个不错的定义:

数据传输对象(DTO),以前称为值对象或VO,是一种设计模式,用于在软件应用程序子系统之间传输数据。 DTO通常与数据访问对象结合使用,以从数据库中检索数据。

数据传输对象与业务对象或数据访问对象之间的区别在于,DTO除了存储和检索自己的数据(访问者和变异者)外,没有其他行为。

在传统的EJB架构中,DTO具有双重目的:首先,它们解决了实体bean无法序列化的问题; 其次,它们隐式定义一个组装阶段,在该阶段中,将视图使用的所有数据都提取并编组到DTO中,然后再将控制权返回到表示层。


因此,对于许多人来说,DTO和VO是同一件事(但是Fowler使用VO表示我们所看到的其他含义)。 大多数时候,它们遵循JavaBeans约定,因此也是JavaBean。 而且都是POJO。


#4楼

基本上,

DTO:“数据传输对象”可以在软件体系结构的不同层之间传播。

VO:“值对象”包含一个对象,例如Integer,Money等。

POJO:普通的旧Java对象,不是特殊对象。

Java Bean:要求Java Class是可序列化的,具有no-arg构造函数以及每个字段的getter和setter


#5楼

POJO :这是一个Java文件(类),不会扩展或实现任何其他Java文件(类)。

Bean :这是一个Java文件(类),其中所有变量都是私有的,方法是公共的,并且使用适当的getter和setter用于访问变量。

普通类 :它是一个Java文件(类),可以由公共/私有/默认/受保护的变量组成,并且可以扩展也可以不扩展或实现另一个Java文件(类)。


#6楼

先说说

普通类 -这意味着任何类在Java中都是正常的定义,这意味着您创建了不同类型的方法属性等。
Bean- Bean没什么,它只是该特定类的对象,使用此Bean可以访问与对象相同的Java类。

然后谈论最后一个POJO

POJO - POJO是没有任何服务的类,它只有一个默认构造函数和private属性,并且这些属性用于设置与setter和getter方法相对应的值。 它是Plain Java Object的简称。


#7楼

  • 值对象 :当需要根据对象的值测量对象的相等性时使用。
  • 数据传输对象 :一次将具有多个属性的数据从客户端跨层传递到服务器,以避免多次调用远程服务器。
  • 普通的Java旧对象 :就像简单的类,其中包含属性,公共的无参数构造函数。 正如我们声明的JPA实体。

值对象模式与数据传输模式之间的差异

DTO,VO,POJO,JavaBeans之间的区别?相关推荐

  1. PO、BO、VO、DTO、POJO、DAO的区别

    PO: 基本上就是Entity了 persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录. 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. ---- ...

  2. dto是什么意思_DO,DTO,VO,POJO 你知道吗?

    作为后端最常用的编程语言之一,Java 已经有很多年的历史了,在阿里内部,Java 也是使用最广泛的一门语言.在阿里实习的这段时间,规范一词是我感受最深的.没有规矩不成方圆,今天来说一下 Java 中 ...

  3. DO,DTO,VO,POJO 你知道吗?

    为什么会出现这些 O? 我们知道,这些 O 不管叫什么名字,其本质都还是对象(Object),既然本质都一样,为什么非要给他们套上各种马甲?个人认为原因有三:第一,随着编程工业化的发展,需要有一套合理 ...

  4. Java中的DO,DTO,VO,POJO

    DO( Data Object):与数据库表结构一一对应,通过 DAO 层向上传输数据源对象. PO(Persistant Object):持久对象,一个 PO 的数据结构对应着库中表的结构,表中的一 ...

  5. java中PO、BO、VO、DTO、POJO、DAO是什么?

    [前面的话] 在和技术人员的交流中,各种专业术语会出现,每次都是默默的记录下出现的术语,然后再去网上查看是什么意思.最近做项目,需要使用到DTO,然后学习一下吧. 这篇文章是关于Java DTO的,选 ...

  6. 关于JAVA Bean实体类对象pojo,vo,po,dto,entity之间的区别

    关于JAVA Bean实体类对象pojo,vo,po,dto,entity之间的区别: Pojo: Pojo 普通的java对象 最基本的javaBean只有属性 加上属性的get,set方法,可以转 ...

  7. VO BO PO DO DTO DAO POJO概念及区别

    VO BO PO DO DTO DAO POJO 概念及区别 1.VO( value object) 即值对象 VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看 ...

  8. java中dao和实体类的关系_【JAVA基础】 PO、VO、BO、DTO、POJO、DAO之间的关系详解...

    J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了 首先声明偶也不是什么高手,以 ...

  9. PO、VO、BO、DTO、POJO、DAO之间的关系

    J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了(听过老罗对这种现象的批判的朋 ...

最新文章

  1. 如何理解 RESTful 的幂等性
  2. 批处理如何清除文本文档里面的重复行
  3. 缓存之EHCache(二)
  4. [渝粤教育] 中国地质大学 运筹学 复习题
  5. macOS Big Sur系统Parallels Desktop无法启动的解决办法
  6. 杭电计算机接口实验报告,杭电新闻
  7. 为了对电脑进行保护,已经阻止此应用 解决办法
  8. FL Studio钢琴卷轴之画笔工具
  9. mysql创建数据库表bank_数据库创建表fk
  10. WPF 简易手绘笔迹支持回放的方法
  11. 創新組合型的架構設計(Part-4):EIT造形幕後的設計思想
  12. React类式组件基础内容补充
  13. Dev-C++5.11实现愤怒的小鸟
  14. 手把手教你使用ModelArts的自动学习识别毒蘑菇分类
  15. pytorch基础-使用 TORCH.AUTOGRAD 进行自动微分(5)
  16. ironpython调用c dll_IronPython.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
  17. 计算机专业助我成长作文600,资助助我成长作文
  18. LwIP学习笔记——STM32 ENC28J60移植与入门
  19. 基恩士系列PLC程序 基恩士KV-N60 PLC程序,搭配松下A5伺服驱动器
  20. rebol学习(介绍篇)

热门文章

  1. ActiveMQ入门教程(一) - JMS和ActiveMQ简介
  2. C#动态数组ArrayList介绍
  3. Win10系统,开机后提示Desktp不可用的故障解决方法。
  4. 第二节:Web前端-ASP.NET之C#基础
  5. 如何才能成为一个高效工作的软件工程师?
  6. Linux 内核协议栈 学习资料
  7. 2018-2019-1 20165208 《信息安全系统设计基础》第5周学习总结
  8. 分享精心收藏的前台开发素材网站,都是干货
  9. leveldb 安装及使用
  10. 混淆Android JAR包的方法