看到过一些类似的问题:

您还可以告诉我它们的使用环境吗?或者说他们的目的是什么?

有帮助吗?

解决方案

JavaBeans

JavaBean 是一个如下的类 JavaBeans 约定 正如 Sun 所定义的。维基百科对什么有很好的总结 JavaBeans 是:

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

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

所需的约定是:

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

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

波乔

普通旧 Java 对象或 POJO 是一个最初引入的术语,用于指定简单的轻量级 Java 对象,不实现任何 javax.ejb 接口,而不是重量级 EJB 2.x(尤其是实体 Bean,无状态会话 Bean 在我看来并没有那么糟糕)。今天,这个术语用于任何没有额外内容的简单对象。再次,维基百科在定义方面做得很好 波乔:

Pojo是普通旧Java对象的首字母缩写。该名称用于强调所讨论的对象是普通的Java对象,而不是特殊对象,尤其不是企业Javabean(尤其是在EJB 3之前)。该任期是由Martin Fowler,Rebecca Parsons和Josh Mackenzie于2000年9月创造的:

“我们想知道为什么人们如此反对在系统中使用常规对象,并得出结论,这是因为简单的对象缺乏奇特的名称。因此,我们给了他们一个,它的捕获非常好。”

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

该术语很可能获得了广泛的接受,因为需要一个与复杂的对象框架形成鲜明对比的通用且易于理解的术语。Javabean是可序列化的POJO,具有一个无题的构造函数,并允许使用Getter和Setter方法访问属性。企业Javabean不是一个类,而是整个组件模型(再次,EJB 3降低了企业Javabeans的复杂性)。

随着使用Pojos的设计变得越来越普遍,因此出现了系统,可以为Pojos提供一些在框架中使用的功能,并更多地选择实际需要哪些功能领域。Hibernate 和 Spring 就是例子。

值对象

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

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

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

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

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

您可以在以下位置找到更多有关有价值对象的好材料 维基百科 并由 德克·里尔.

数据传输对象

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

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

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

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


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

其他提示

DTO 与 VO

DTO- 数据传输对象只是数据容器,用于在层与层之间传输数据。

  • 主要包含属性。您甚至可以使用公共属性而不需要 getter 和 setter。
  • 数据传输对象不包含任何业务逻辑。

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

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

DTO 主要用于使数据在网络上高效传输,甚至可以从 JVM 传输到另一个 JVM。

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

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

POJO 与 JavaBean

1] Pojo的爪哇豆类是,其私人属性都是通过符合Javabeans惯例的公共Getters和Setter访问的。例如

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

2] Javabeans必须实现可序列化的,并且具有无肢体构造函数,而在Pojo中没有这些限制。

基本上,

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

画外音:“值对象”保存诸如整数、货币等对象。

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

爪哇豆:需要一个 Java Class 要可序列化,有一个 no-arg 每个字段的构造函数以及 getter 和 setter

Java Bean 与 EJB 不同。

JavaBeans 规范 Java 1.0 中Sun 尝试允许在类似于VB 的IDE 中操作Java 对象。对于符合“Java Beans”资格的对象制定了规则:

  1. 默认构造函数
  2. 遵循正确命名约定的私有数据成员的 getter 和 setter
  3. 可串行化
  4. 也许我忘记了其他人。

EJB 后来出现。它们结合了分布式组件和事务模型,在管理线程、池、生命周期并提供服务的容器中运行。它们与 Java Bean 相去甚远。

DTO 在 Java 环境中出现,因为人们发现 EJB 1.0 规范与数据库过于“啰嗦”。人们不会对每个数据元素进行往返,而是将它们批量打包成 Java Bean 并进行传送。

POJO 是针对 EJB 的反应。

波乔 :它是一个java文件(类),它不扩展或实现任何其他java文件(类)。

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

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

首先谈谈

普通班 - 这意味着任何在 java 中通常定义的类都意味着您创建不同类型的方法属性 ETC。
豆 - Bean什么都不是,它只是该特定类的一个对象,使用这个bean你可以像对象一样访问你的java类。.

然后谈论最后一个 POJO

波乔 - 波乔 是没有任何服务的类,它只有一个默认构造函数和私有属性,以及用于设置相应的 setter 和 getter 方法的值的属性。它是纯 Java 对象的缩写形式。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top