见过一些类似的问题:
你能告诉我它们在什么语境中使用吗?或者它们的目的是什么?
Java bean与ejb不是一回事。
Java 1.0中的JavaBeans规范是Sun试图允许Java对象在一个看起来像VB的IDE中被操纵。对于符合“Java Beans”条件的对象,制定了一些规则:
ejb是后来出现的。它们结合了分布式组件和事务模型,运行在管理线程、池、生命周期和提供服务的容器中。它们与Java bean相去甚远。
dto是在Java上下文中出现的,因为人们发现EJB 1.0规范与数据库过于“健谈”。人们不需要为每个数据元素进行往返,而是将它们批量打包到Java bean中并四处运送。
pojo是对ejb的一种反应。
DTO vs VO
数据传输对象只是用于在层与层之间传输数据的数据容器。
类比: 简单注册表属性用户名, 密码和电子邮件id。< / p > 当这个表单在RegistrationServlet文件中提交时,您将获得从视图层到您传递的业务层的所有属性 将属性转移到java bean,然后转移到DAO或持久层。李< / > DTO有助于将属性从视图层传输到业务层,并最终传输到持久层。
类比: 简单注册表属性用户名, 密码和电子邮件id。< / p >
DTO主要用于在网络上有效地传输数据,甚至可以从JVM传输到另一个JVM。
dto通常是java.io.Serializable -以便跨JVM传输数据。
java.io.Serializable
[1][2]本身代表一个固定的数据集,类似于Java enum。值对象的标识基于它们的状态,而不是它们的对象标识,并且是不可变的。一个真实世界的例子就是Color。红色,颜色。蓝色,性。女等。
POJO vs JavaBeans
private String foo; public String getFoo(){...} public void setFoo(String foo){...};
JavaBean是一个遵循Sun定义的javabean惯例的类。维基百科对javabean有一个很好的总结:
javabean是Java的可重用软件组件,可以在构建器工具中进行可视化操作。实际上,它们是用符合特定约定的Java编程语言编写的类。它们用于将许多对象封装到单个对象(bean)中,这样它们就可以作为单个bean对象传递,而不是作为多个单独的对象传递。JavaBean是可序列化的Java对象,有一个空构造函数,并允许使用getter和setter方法访问属性。 为了作为JavaBean类运行,对象类必须遵守关于方法命名、构造和行为的某些约定。这些约定使得能够使用、重用、替换和连接javabean的工具成为可能。 约定如下: 类必须有一个公共默认构造函数。这允许在编辑和激活框架中容易地实例化。 类属性必须可以使用get、set和其他方法(所谓的访问方法和mutator方法)访问,并遵循标准命名约定。这允许在框架内轻松地自动检查和更新bean状态,其中许多框架包括用于各种类型属性的自定义编辑器。 类应该是可序列化的。这允许应用程序和框架以独立于VM和平台的方式可靠地保存、存储和恢复bean的状态。 因为这些需求很大程度上是用约定而不是通过实现接口来表达的,所以一些开发人员将javabean视为遵循特定命名约定的普通旧Java对象。
javabean是Java的可重用软件组件,可以在构建器工具中进行可视化操作。实际上,它们是用符合特定约定的Java编程语言编写的类。它们用于将许多对象封装到单个对象(bean)中,这样它们就可以作为单个bean对象传递,而不是作为多个单独的对象传递。JavaBean是可序列化的Java对象,有一个空构造函数,并允许使用getter和setter方法访问属性。
为了作为JavaBean类运行,对象类必须遵守关于方法命名、构造和行为的某些约定。这些约定使得能够使用、重用、替换和连接javabean的工具成为可能。
约定如下:
因为这些需求很大程度上是用约定而不是通过实现接口来表达的,所以一些开发人员将javabean视为遵循特定命名约定的普通旧Java对象。
普通旧Java对象或POJO是一个最初引入的术语,用于指定简单的轻量级Java对象,与重量级EJB 2相反,它不实现任何javax.ejb接口。x(特别是实体bean,无状态会话bean在我看来并不是那么糟糕)。今天,这个词被用于任何简单的物体,没有额外的东西。同样,维基百科在定义POJO方面做得很好:
javax.ejb
POJO是Plain Old Java的首字母缩写 对象。这个名字用来强调 所讨论的对象是一个 普通的Java对象,不是特殊的 对象,特别是不是 企业JavaBean(特别是以前 这个术语是Martin创造的 福勒,丽贝卡·帕森斯和乔什 2000年9月MacKenzie: “我们想知道为什么人们如此反对在他们的记忆中使用常规物体 系统,并得出结论 因为简单的物品缺乏想象力 的名字。所以我们给了他们一个 很受欢迎。" < / em > < / p > 该术语延续了 旧的技术术语 不要使用花哨的新功能,比如 POTS(普通电话服务)在 电话和PODS(普通旧数据) 在c++中定义的结构 但只使用C语言的特性,以及 . POD(普通旧文档) 这个词很可能增加了 广泛接受是因为 需要一个共同的和容易的 与之相对的术语 复杂的对象框架。一个 JavaBean就是一个POJO Serializable,有一个no参数 构造函数,并允许访问 属性使用getter和setter 方法。企业JavaBean则不是 一个单独的类,但是一个完整的组件 模型(同样,EJB 3减少了 .企业javabean的复杂性) 作为设计使用pojo已经成为 比较常用的,系统有 给pojo带来了一些 框架和中使用的功能 更多关于哪些领域的选择 功能性是需要的。 . Hibernate和Spring为例
“我们想知道为什么人们如此反对在他们的记忆中使用常规物体 系统,并得出结论 因为简单的物品缺乏想象力 的名字。所以我们给了他们一个 很受欢迎。" < / em > < / p >
该术语延续了 旧的技术术语 不要使用花哨的新功能,比如 POTS(普通电话服务)在 电话和PODS(普通旧数据) 在c++中定义的结构 但只使用C语言的特性,以及
这个词很可能增加了 广泛接受是因为 需要一个共同的和容易的 与之相对的术语 复杂的对象框架。一个 JavaBean就是一个POJO Serializable,有一个no参数 构造函数,并允许访问 属性使用getter和setter 方法。企业JavaBean则不是 一个单独的类,但是一个完整的组件 模型(同样,EJB 3减少了
作为设计使用pojo已经成为 比较常用的,系统有 给pojo带来了一些 框架和中使用的功能 更多关于哪些领域的选择 功能性是需要的。
值对象(Value Object)或VO是像java.lang.Integer这样保存值的对象(因此是值对象)。对于更正式的定义,我经常参考Martin Fowler对值对象的描述:
java.lang.Integer
在企业应用程序体系结构的模式中,我将值对象描述为一个小对象,例如金钱或日期范围对象。它们的关键属性是遵循值语义而不是引用语义。 你通常可以告诉它们,因为它们的相等的概念不是基于单位,而是如果两个值对象的所有字段都相等,那么它们就是相等的。尽管所有字段都是相等的,但如果子集是唯一的,则不需要比较所有字段——例如,货币对象的货币代码就足以测试相等性。 一般的启发是值对象应该是完全不可变的。如果你想要改变一个值对象,你应该用一个新的对象替换该对象,并且不允许更新值对象本身的值——可更新的值对象会导致别名问题。 早期J2EE文献使用术语值对象来描述一个不同的概念,我称之为数据传输对象。他们后来改变了他们的用法,改为使用传输对象这个术语。 你可以在维基和德克项目部上找到更多关于值对象的好材料。
在企业应用程序体系结构的模式中,我将值对象描述为一个小对象,例如金钱或日期范围对象。它们的关键属性是遵循值语义而不是引用语义。
你通常可以告诉它们,因为它们的相等的概念不是基于单位,而是如果两个值对象的所有字段都相等,那么它们就是相等的。尽管所有字段都是相等的,但如果子集是唯一的,则不需要比较所有字段——例如,货币对象的货币代码就足以测试相等性。
一般的启发是值对象应该是完全不可变的。如果你想要改变一个值对象,你应该用一个新的对象替换该对象,并且不允许更新值对象本身的值——可更新的值对象会导致别名问题。
早期J2EE文献使用术语值对象来描述一个不同的概念,我称之为数据传输对象。他们后来改变了他们的用法,改为使用传输对象这个术语。
你可以在维基和德克项目部上找到更多关于值对象的好材料。
数据传输对象(DTO)是EJB引入的一种(反)模式。与其在ejb上执行许多远程调用,其思想是将数据封装在一个可以通过网络传输的值对象中:数据传输对象。维基百科对数据传输对象有一个很好的定义:
数据传输对象(DTO),以前称为值对象或VO,是用于在软件应用程序子系统之间传输数据的设计模式。dto通常与数据访问对象一起使用,以从数据库中检索数据。 数据传输对象与业务对象或数据访问对象之间的区别在于,DTO除了存储和检索自己的数据(访问器和突变器)之外没有任何行为。 在传统的EJB体系结构中,dto有双重目的:首先,它们解决实体bean不可序列化的问题;其次,它们隐式地定义了一个组装阶段,在将控制返回到表示层之前,视图使用的所有数据都被提取并编组到dto中。
数据传输对象(DTO),以前称为值对象或VO,是用于在软件应用程序子系统之间传输数据的设计模式。dto通常与数据访问对象一起使用,以从数据库中检索数据。
数据传输对象与业务对象或数据访问对象之间的区别在于,DTO除了存储和检索自己的数据(访问器和突变器)之外没有任何行为。
在传统的EJB体系结构中,dto有双重目的:首先,它们解决实体bean不可序列化的问题;其次,它们隐式地定义了一个组装阶段,在将控制返回到表示层之前,视图使用的所有数据都被提取并编组到dto中。
因此,对于许多人来说,dto和VOs是同一个东西(但是Fowler用VOs来表示我们看到的其他东西)。大多数时候,它们遵循javabean约定,因此也是javabean。而且都是pojo。
基本上,
DTO:“数据传输对象”可以在软件架构的不同层之间传输。
VO:“值对象”包含一个对象,如Integer,Money等。
POJO:普通的旧Java对象,不是一个特殊的对象。
Java Beans:要求Java Class是可序列化的,有一个no-arg构造函数和每个字段的getter和setter
Java Class
no-arg
第一次谈论
正常类 -这意味着任何类定义,这通常是在java中,这意味着你创建不同类型的方法属性等。 Bean什么都不是,它只是一个特定类的对象,使用这个Bean,你可以访问你的java类,就像object
之后是最后一个POJO
POJO - POJO是一个没有任何服务的类,它只有一个默认的构造函数和私有属性,这些属性用于设置对应的setter和getter方法的值。 它是普通Java对象的简写形式
< a href = " https://stackoverflow.com/a/55970219/2490336 " > difference-between-value-object-pattern-and-data-transfer-pattern < / >