首页 > Java >  Java中DTO, VO, POJO, JavaBeans 的区别?

 Java中DTO, VO, POJO, JavaBeans 的区别?

上一篇 下一篇

看过一些类似的问题:

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

您能否告诉我使用它们的上下文?还是它们的目的?

分割线

网友回答:

爪哇豆

JavaBean是一个遵循Sun定义的JavaBeans约定的类。 维基百科对JavaBeans有一个很好的总结:

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

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

所需的约定是:

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

由于这些需求主要表示为约定而不是通过实现接口来表示,因此一些开发人员将 JavaBeans 视为遵循特定命名约定的普通旧 Java 对象。

波乔

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

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

“我们想知道为什么人们如此反对在他们的
系统中使用常规对象,并得出结论,
这是因为简单的对象缺乏一个花哨
的名字。所以我们给了他们一个,它很好地
流行起来。

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

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

随着使用 POJO 的设计变得越来越
普遍,出现了一些系统,这些系统
为 POJO 提供了框架中使用的一些功能,并
就实际需要哪些

功能区域提供了更多选择。
Hibernate和Spring就是例子。

值对象

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

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

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

一般的启发式方法是值对象应该是完全不可变的。如果要更改值对象,则应将对象替换为新对象,并且不允许更新值对象本身的值 – 可更新的值对象会导致锯齿问题。

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

你可以在wiki和Dirk Riehle上找到更多关于价值对象的好材料。

数据传输对象

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

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

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

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


因此,对于许多人来说,DTO 和 VO 是一回事(但 Fowler 使用 VO 来表示我们看到的其他东西)。大多数时候,它们遵循JavaBeans惯例,因此也是JavaBeans。而且都是波约。

分割线

网友回答:

DTO vs VO

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

  • 它主要包含属性。您甚至可以在没有 getter 和 setter 的情况下使用公共属性。
  • 数据传输对象不包含任何业务逻辑。

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

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

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

DTO通常是 – 为了在JVM之间传输数据。java.io.Serializable

VO –值对象 [1][2] 表示自身是一组固定的数据,类似于 Java 枚举。值对象的标识基于其状态而不是其对象标识,并且是不可变的。一个真实世界的例子是Color.RED,Color.BLUE,。女性等

POJO vs JavaBeans

[1]
POJO 的 Java-Beanity 在于它的私有属性都可以通过符合 JavaBeans 约定的公共 getter 和 setter 访问。例如

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

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

分割线

网友回答:

基本上

DTO:“数据传输对象”可以在软件架构中的不同层之间移动。

VO:“值对象”保存一个对象,如整数,货币等。

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

Java Beans:要求 a 是可序列化的,每个字段都有一个构造函数和一个 getter 和 setterJava Classno-arg

模板简介:该模板名称为【 Java中DTO, VO, POJO, JavaBeans 的区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 231次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-20
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 企业网站 单页式简历模板 微信文章 微信素材 微信模板 自适应 微信公众平台 html5 微信图片
您可能会喜欢的其他模板