DTO,VO,POJO,JavaBeans之间的区别?

时间:2009-10-23 09:30:36

标签: java terminology javabeans dto pojo

看过一些类似的问题:

您还可以告诉我使用它们的背景吗?还是他们的目的?

7 个答案:

答案 0 :(得分:776)

答案 1 :(得分:57)

DTO vs VO

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

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

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

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

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

DTO通常是java.io.Serializable - 以便通过JVM传输数据。

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

POJO与JavaBeans

[1] POJO的Java-Bean是它的私有属性都是通过符合JavaBeans约定的公共getter和setter访问的。 e.g。

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

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

答案 2 :(得分:39)

基本上,

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

VO:“值对象”包含一个对象,如Integer,Money等。

POJO:Plain Old Java Object,它不是特殊对象。

Java Beans:要求Java Class可序列化,具有no-arg构造函数以及每个字段的getter和setter

答案 3 :(得分:24)

Java Bean与EJB不同。

Java 1.0中的JavaBeans specification是Sun试图在一个看起来像VB的IDE中操作Java对象的尝试。为符合“Java Bean”的对象制定了规则:

  1. 默认构造函数
  2. 遵循正确命名惯例的私有数据成员的getter和setter
  3. 序列化
  4. 也许是其他人,我忘记了。
  5. EJB后来出现了。它们结合了分布式组件和事务模型,在管理线程,池,生命周期和提供服务的容器中运行。它们与Java Beans相去甚远。

    DTOs出现在Java上下文中,因为人们发现EJB 1.0规范对数据库来说过于“讨厌”。人们不是为每个数据元素进行往返,而是将它们批量打包到Java Bean中并运送它们。

    POJO是对EJB的反应。

答案 4 :(得分:4)

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

<强>豆: 它是一个java文件(类),其中所有变量都是私有的,方法是公共的,适当的getter和setter用于访问变量。

普通班级: 它是一个java文件(类),可能包含public / private / default / protected变量,可能会也可能不会扩展或实现另一个java文件(类)。

答案 5 :(得分:1)

首先谈谈

普通班级 - 这意味着任何班级都会在java中正常定义,这意味着您创建了不同类型的方法属性的
Bean - Bean并不是什么它只是使用这个bean的特定类的对象,你可以访问与object相同的java类。

之后谈到最后一个POJO

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

答案 6 :(得分:0)

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

difference-between-value-object-pattern-and-data-transfer-pattern