gpt4 book ai didi

java - DTO、VO、POJO、JavaBean 之间的区别?

转载 作者:行者123 更新时间:2023-12-01 16:12:49 26 4
gpt4 key购买 nike

见过一些类似的问题:

您能告诉我它们的使用环境吗?或者他们的目的?

最佳答案

JavaBean

JavaBean 是一个遵循 the JavaBeans conventions 的类正如 Sun 所定义的。维基百科对JavaBeans有一个很好的总结。是:

JavaBeans are reusable software components for Java that can be manipulated visually in a builder tool. Practically, they are classes written in the Java programming language conforming to a particular convention. They are used to encapsulate many objects into a single object (the bean), so that they can be passed around as a single bean object instead of as multiple individual objects. A JavaBean is a Java Object that is serializable, has a nullary constructor, and allows access to properties using getter and setter methods.

In order to function as a JavaBean class, an object class must obey certain conventions about method naming, construction, and behavior. These conventions make it possible to have tools that can use, reuse, replace, and connect JavaBeans.

The required conventions are:

  • The class must have a public default constructor. This allows easy instantiation within editing and activation frameworks.
  • The class properties must be accessible using get, set, and other methods (so-called accessor methods and mutator methods), following a standard naming convention. This allows easy automated inspection and updating of bean state within frameworks, many of which include custom editors for various types of properties.
  • The class should be serializable. This allows applications and frameworks to reliably save, store, and restore the bean's state in a fashion that is independent of the VM and platform.

Because these requirements are largely expressed as conventions rather than by implementing interfaces, some developers view JavaBeans as Plain Old Java Objects that follow specific naming conventions.

POJO

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

POJO is an acronym for Plain Old Java Object. The name is used to emphasize that the object in question is an ordinary Java Object, not a special object, and in particular not an Enterprise JavaBean (especially before EJB 3). The term was coined by Martin Fowler, Rebecca Parsons and Josh MacKenzie in September 2000:

"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."

该术语延续了以下模式: 技术的旧术语 不使用花哨的新功能,例如 POTS(普通老式电话服务) 电话和 PODS(普通旧数据 C++ 中定义的结构体 但仅使用 C 语言功能,并且 Perl 中的 POD(普通旧文档)。

这个词很可能已经获得了认可 广泛接受是因为 需要一个共同且容易的 理解与对比的术语 复杂的对象框架。 A JavaBean 是一个 POJO,它是 可序列化,无参数 构造函数,并允许访问 使用 getter 和 setter 的属性 方法。 Enterprise JavaBean 不是 单个类但整个组件 模型(同样,EJB 3 减少了 Enterprise JavaBeans 的复杂性)。

随着使用 POJO 的设计变得 更常用的是,系统有 的出现为 POJO 提供了一些 框架中使用的功能和 对哪些领域有更多选择 实际需要的功能。 Hibernate 和 Spring 就是示例。

值对象

值对象或 VO 是诸如 java.lang.Integer 之类的对象保存值(因此是值对象)。对于更正式的定义,我经常引用 Martin Fowler 对 Value Object 的描述。 :

In Patterns of Enterprise Application Architecture I described Value Object as a small object such as a Money or date range object. Their key property is that they follow value semantics rather than reference semantics.

You can usually tell them because their notion of equality isn't based on identity, instead two value objects are equal if all their fields are equal. Although all fields are equal, you don't need to compare all fields if a subset is unique - for example currency codes for currency objects are enough to test equality.

A general heuristic is that value objects should be entirely immutable. If you want to change a value object you should replace the object with a new one and not be allowed to update the values of the value object itself - updatable value objects lead to aliasing problems.

Early J2EE literature used the term value object to describe a different notion, what I call a Data Transfer Object. They have since changed their usage and use the term Transfer Object instead.

You can find some more good material on value objects on the wiki and by Dirk Riehle.

数据传输对象

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

Data transfer object (DTO), formerly known as value objects or VO, is a design pattern used to transfer data between software application subsystems. DTOs are often used in conjunction with data access objects to retrieve data from a database.

The difference between data transfer objects and business objects or data access objects is that a DTO does not have any behaviour except for storage and retrieval of its own data (accessors and mutators).

In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier.

<小时/>

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

关于java - DTO、VO、POJO、JavaBean 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com