这些是同义词,彼此的子集还是完全不同?

时间:2010-07-10 15:06:03

标签: java business-objects javabeans pojo value-objects

问题标题中提到的概念在某种程度上是同义词吗?主要差异在哪里(背景,结构,......)可以被视为另一个的子集?以下是维基百科的一些简要定义。

POJO(普通旧Java对象) Wikipedia

  

在计算软件中,POJO是一个   Plain Old Java Object的首字母缩写。该   name用来强调给定的   object是普通的Java Object,而不是   一个特殊的对象,特别是   不是Enterprise JavaBean。术语   由丽贝卡的马丁福勒创造   帕森斯和约什麦肯齐在   2000年9月:

"We wondered why people were so against using regular objects in their
 systems and concluded that it was
 because simple objects lacked a fancy
 name. So we gave them one, and it's
 caught on very nicely."

Java Bean Wikipedia

  

JavaBeans是可重复使用的软件   可以是Java的组件   在构建器中以视觉方式操纵   工具。实际上,他们是课程   用Java编程编写   语言符合特定的   惯例。他们习惯了   将许多对象封装成一个   对象(bean),以便它们可以   作为单个bean对象传递   而不是作为多个人   对象。 JavaBean是Java对象   这是可序列化的,有一个nullary   构造函数,并允许访问   使用getter和setter的属性   方法

价值对象 Wikipedia

  

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

业务对象 Wikipedia

  

业务对象是一种类型   可理解的实体是一个演员   在业务层内部   n层面向对象计算机   程序

相关:

  

Difference between DTO, VO, POJO, JavaBeans?   What is the difference between a JavaBean and a POJO?   DDD: what's the use of the difference between entities and value objects?

4 个答案:

答案 0 :(得分:6)

并非所有这些分类都相关。这是我的理解:

  • POJO就是它的名字所暗示的 - 一个普通的旧Java对象。没什么特别的。当我们说对象是POJO时,这正是我们想要传达的。今天,大多数应用程序使用某种底层框架,并且框架对与框架集成的对象提出了要求 - 对象必须实现接口或扩展类。当我们说一个对象是一个POJO时,我们的意思是说它只是一个普通的对象而且对任何框架都没有依赖性。

  • JavaBean是一个遵循您的问题中描述的某些约定的java类。这些对象通常由某些框架强制要求,这些框架使用反射来找出对象的属性(可通过getter / setter访问)并操纵它们,例如,暴露于JSP,Spring bean等的bean。关于JavaBeans的好处是它们仍然是POJO。虽然它们遵循某些约定,但约定不是由任何特定框架定义,而是由Sun Javabean标准定义,并且类仍然是普通的Java类,与任何第三方框架的类或接口无关。

  • Business Objects引用代表您的业务领域实体的对象。这些通常位于业务层 - 所有业务逻辑所在的层。这些对象通常映射到持久性存储实体,例如表。这些对象可以是POJO,JavaBeans,EJB等。

  • 值对象是一种设计模式。在某些小型Web应用程序中,您还可以选择在Web层中使用业务对象。但是,在较大的应用程序或J2EE应用程序中,您可以定义值对象以将信息从业务层移动到Web层。这就是为什么它们也被称为数据传输对象(DTO)。这些对象通常只具有Web层中所需的属性,并留下业务对象的属性,这些属性是用于业务层消费的。它们还可能具有在业务层中生成的“计算”属性。使用此模式有助于解耦业务层和Web层。

答案 1 :(得分:3)

这是我的看法:

  1. 业务对象是一个通用术语 对于抽象的想法 代表你的问题。您可以 用任何语言实现它们。在 Java,您还有其他选择 make,因为他们可以是POJO或 EJB,可变或不可变。
  2. 值对象或DTO用于在层之间传送数据。他们通常是不可改变的。它们可以实现为POJO或Java Bean。将它们视为POJO的另一个子集。
  3. Java Bean符合最初的Sun规范。它们旨在提供一个接口,使其可以轻松插入VB样式的IDE。将这些视为POJO的一个子集。
  4. 人们有时会对Java Bean和Enterprise Java Bean之间的区别感到困惑。 Java Beans是原始Java 1.0规范的一部分,旨在像VB组件一样(还记得“Bean Box”吗?)。 Enterprise Java Beans之后的规范描述了特殊Java对象如何实现特定接口以与Java EE应用服务器进行互操作。应用程序服务器是分布式组件体系结构的事务监视器,它将处理线程,持久性,池化,对象生命周期,消息传递,命名等.EJB是Java对象的一个​​非常特殊的子集,仅在Java EE应用程序的上下文中工作服务器
  5. 可以实现POJO以符合Java Bean标准,但这不是必需的。任何Java对象都有资格作为POJO。它原本是为了将它们与EJB 2.0版区分开来,后者需要多个接口才能正确地与Java EE应用服务器进行互操作。

答案 2 :(得分:1)

  

问题在于,使用其中一些作为同义词是否是错误的(就像我听过一些人所做的那样)以及是否可以将给定的分类视为一个子集或另一个。

将这些术语用作同义词是错误的。它们显然具有不同的含义。引用的定义(以及其他答案中提供的定义)清楚地说明了这一点。

但是,如果使用这些术语中的许多(甚至全部)来描述相同的对象或对象通常是有效的。这完全是一个观点问题;即你试图强调的对象的哪个方面。

答案 3 :(得分:0)

综合(来自答案):

  • POJO :对任何框架都没有依赖关系的普通对象。它可以适应符合Java Bean标准,而不是这样的要求。
  • JavaBean :符合Sun JavaBean或Java 1.0规范的对象(请参阅“Bean框”)。它们最初旨在提供一个接口,因此它们可以很容易地插入VB风格的IDE中。可以被视为POJO的一个子集,并且与框架保持独立。它可以使用某些机制,例如反射来访问属性。
  • Enterprise Java Bean :不应将这些与Java Bean混淆。通过3.0版本带来的简化,可以认为EJB等同于POJO。 EJB本身就是一个描述可以与Java EE服务器互操作的特殊Java对象的规范。这样的服务器在分布式组件体系结构的上下文中充当事务监视器,处理诸如线程,持久性,池,对象生命周期,消息传递和命名之类的事物。因此,可以将EJB视为在Java EE应用程序服务器的使用中使用的非常特殊的子集。
  • 业务对象:有助于表示给定问题的理论概念或抽象概念。它表示业务域实体并驻留在应用程序的业务层中。它们可以映射到持久性上下文中的实体。该对象可以是POJO / JavaBean / EJB,可以是可变的也可以是不可变的。
  • 值对象/数据传输对象:采用有助于解耦业务层和Web层的设计模式。这适用于大型应用程序的上下文,其中对象可以在层之间传输(例如,业务和Web层)。它们通常在本质上是不可变的,可以形成为POJO或Java Bean。一个特点是它们可以包含在业务层中生成的计算属性。

P.S:标记为社区维基,所以随时可以编辑。