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

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

曾见过一些类似的问题:

你还能告诉我使用它们的上下文吗?或者他们的目的?


慕尼黑的夜晚无繁华
浏览 996回答 3
3回答

湖上湖

JavaBeansJavaBean是以下类JavaBeans公约正如Sun所定义的。维基百科很好地总结了JavaBeans是:JavaBeans是Java的可重用软件组件,可以在构建器工具中可视化地操作。实际上,它们是用Java编程语言编写的符合特定约定的类。它们用于将许多对象封装到单个对象(Bean)中,这样就可以将它们作为单个bean对象传递,而不是作为多个单独的对象传递。JavaBean是一个可序列化的Java对象,它有一个延髓构造函数,允许使用getter和setter方法访问属性。为了作为JavaBean类发挥作用,对象类必须遵守关于方法命名、构造和行为的某些约定。这些约定使得可以使用、重用、替换和连接JavaBeans的工具成为可能。所需的公约是:该类必须具有公共默认构造函数。这允许在编辑和激活框架中轻松实例化。按照标准命名约定,类属性必须使用get、set和其他方法(所谓的访问器方法和muator方法)进行访问。这允许在框架内自动检查和更新bean状态,其中许多框架包括针对各种类型属性的自定义编辑器。类应该是可序列化的。这允许应用程序和框架以独立于VM和平台的方式可靠地保存、存储和恢复bean的状态。由于这些需求在很大程度上是用约定而不是通过实现接口来表示的,一些开发人员将JavaBeans视为遵循特定命名约定的普通旧Java对象。波霍普通旧Java对象或POJO是最初引入的一个术语,用于指定一个简单的轻量级Java对象,而不是实现任何javax.ejb接口,而不是重量级EJB 2.x(特别是实体bean,无状态会话bean并没有那么糟糕)。今天,这个词被用于任何简单的对象,没有额外的东西。同样,维基百科在定义波霍:POJO是简单旧Java对象的缩写。这个名称用于强调所讨论的对象是一个普通的Java对象,而不是一个特殊的对象,特别是EnterpriseJavaBean(尤其是在EJB 3之前)。这个词是马丁·福勒、丽贝卡·帕森斯和乔希·麦肯齐在2000年9月发明的:“我们想知道为什么人们如此反对在他们的系统中使用常规的对象,并得出结论,这是因为简单的对象缺乏一个花哨的名字。所以我们给了它们一个名字,它很受欢迎。”这个术语延续了不使用花哨的新功能的技术的旧术语模式,如电话中的POTS(普通旧电话服务),以及在C+中定义但只使用C语言特性的PODS(普通旧数据结构),以及Perl中的POD(朴素旧文档)。该术语最有可能得到广泛接受,因为需要一个与复杂的对象框架形成对比的通用且易于理解的术语。JavaBean是一个可序列化的POJO,具有非参数构造函数,并允许使用getter和setter方法访问属性。EnterpriseJavaBean不是一个单独的类,而是一个完整的组件模型(同样,EJB 3降低了EnterpriseJavaBeans的复杂性)。随着使用POJO的设计变得越来越普遍,出现了一些系统,使POJO在框架中使用了一些功能,并且更多地选择了实际需要哪些领域的功能。Hibernate和Spring就是例子。值对象值对象或VO是一个对象,如java.lang.Integer保存值(因此是值对象)的。关于更正式的定义,我经常提到MartinFowler对值对象:在企业应用程序体系结构的模式中,我将Value对象描述为一个小对象,例如Money或Date Range对象。它们的关键属性是它们遵循值语义,而不是引用语义。您通常可以告诉他们,因为他们的平等概念不是基于身份,而是两个值对象是相等的,如果它们的所有字段是相等的。尽管所有字段都是相等的,但如果子集是唯一的,则不需要比较所有字段-例如,货币对象的货币代码足以测试相等性。一个普遍的启发是,值对象应该是完全不可变的。如果要更改值对象,则应用新对象替换该对象,而不允许更新值对象本身的值-可更新的值对象会导致别名问题。早期的j2ee文献使用了值对象一词来描述一个不同的概念,我称之为数据传输对象..自那以后,他们改变了用法,使用了这个词。传递对象相反。您可以在维基并通过德克·里尔.数据传输对象数据传输对象(DTO)是EJB引入的一种(反)模式。这个想法不是对EJB执行许多远程调用,而是将数据封装在一个可以通过网络传输的值对象中:一个数据传输对象。维基百科对数据传输对象:数据传输对象(DTO),以前称为值对象(Value Objects,VO),是一种用于在软件应用子系统之间传输数据的设计模式。DTO经常与数据访问对象一起使用,从数据库中检索数据。数据传输对象与业务对象或数据访问对象之间的区别在于,DTO除了存储和检索自己的数据(访问器和变异器)外,没有任何行为。在传统的EJB体系结构中,DTO具有双重用途:第一,它们解决了实体bean不可序列化的问题;第二,它们隐式地定义了一个组装阶段,其中视图要使用的所有数据都在返回到表示层之前被获取和编组到DTO中。因此,对于许多人来说,DTO和Vos是同一回事(但是Fowler使用Vos来表示其他事情,就像我们看到的那样)。大多数时候,它们遵循JavaBeans的约定,因此也是JavaBeans。都是战俘。

开满天机

基本上,DTO:“数据传输对象”可以在软件体系结构中的不同层之间传输。Vo:“Value Objects”持有一个对象,如Integer、Money等。POJO:普通的旧Java对象,它不是一个特殊的对象。Javabean:需要一个Java Class若要可序列化,请使用no-arg构造函数和每个字段的getter和setter。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java