Java 中的 JavaBeans、POJO、VO、DTO 之间的区别

JavaBeans


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

JavaBeans是可重用的Java软件组件,可以在构建器工具中直观地操作。实际上,它们是用符合特定约定的Java编程语言编写的类。

它们用于将许多对象封装到单个对象(bean)中,以便它们可以作为单个bean对象而不是多个单独对象传递。 JavaBean是一个Java对象,它是可序列化的,具有无参构造器,并允许使用getter和setter方法访问属性。

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

所需的约定是:

  • 该类必须具有公共的默认构造函数。这允许在编辑和激活框架中轻松实例化。

  • 按照标准的命名约定,类属性必须可以使用get,set和其他方法(所谓的访问器方法和增变器方法)进行访问。这允许在框架内轻松自动检查和更新bean状态,其中许多包括各种类型属性的自定义编辑器。

  • 该类应该是可序列化的。这允许应用程序和框架以独立于VM和平台的方式可靠地保存,存储和恢复bean的状态。

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


POJO


A Plain Old Java Object or POJO 是最初引入的一个术语,用于指定一个简单的轻量级Java对象,而不是实现任何javax.ejb接口,而不是重量级的EJB 2.x(特别是实体Bean,无状态会话Bean并不是那么糟糕的IMO) 。今天,这个术语被用于任何没有额外东西的简单对象。再一次,维基百科在定义POJO方面做得很好:

POJO是Plain Old Java Object的首字母缩写。该名称用于强调所讨论的对象是一个普通的Java对象,而不是一个特殊的对象。

这个术语最有可能得到广泛的接受,因为需要一个与复杂的对象框架形成对比的通用且容易理解的术语。 JavaBean是一个可序列化的POJO,具有无参数的构造函数,并允许使用getter和setter方法访问属性。


VO


A Value Object or VO 是一个对象,如java.lang.Integer,用于存放值(因此为值对象)。对于更正式的定义,我经常提到Martin Fowler对价值对象的描述:

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

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


DTO


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

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

DTO 和 BO 或者是 DAO 之间的区别是,DTO除了存储和检索自己的数据(访问器和增变器)之外没有任何行为。

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


所以,对于很多人来说,DTO和VO都是一样的东西。大多数时候,他们遵循JavaBeans约定,因此也是JavaBeans。而且都是POJO。


DTO: “Data transfer objects ” can travel between seperate layers in software architecture.

VO: “Value objects ” hold a object such as Integer,Money etc.

POJO: Plain Old Java Object which is not a special object.

Java Beans: requires a Java Class to be serializable, have a no-arg constructor and a getter and setter for each field


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

VO:“价值对象”持有Integer,Money等对象

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

Java Beans:需要Java Class可序列化,具有无参数构造函数以及每个字段的getter和setter


参考资料

1、Difference between DTO, VO, POJO, JavaBeans?
https://stackoverflow.com/questions/1612334/difference-between-dto-vo-pojo-javabeans

2、What is the difference between a JavaBean and a POJO?
https://stackoverflow.com/questions/1394265/what-is-the-difference-between-a-javabean-and-a-pojo


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值