DTO,VO,POJO,JavaBeans之间的区别?
JavaBeans
JavaBean是遵循Sun定义的JavaBeans约定的类。Wikipedia很好地总结了什么是JavaBean:
JavaBean是Java的可重用软件组件,可以在构建器工具中直观地对其进行操作。实际上,它们是用Java编程语言编写的,符合特定约定的类。它们用于将许多对象封装到单个对象(bean)中,以便可以将它们作为单个bean对象而不是多个单个对象传递。JavaBean是可序列化的Java对象,具有null构造函数,并允许使用getter和setter方法访问属性。
为了充当JavaBean类,对象类必须遵守有关方法命名,构造和行为的某些约定。这些约定使拥有可以使用,重用,替换和连接JavaBean的工具成为可能。
所需的约定为:
该类必须具有公共默认构造函数。这样可以在编辑和激活框架内轻松实例化。
必须遵循标准命名约定,使用get,set和其他方法(所谓的accessor方法和mutator方法)访问类属性。这样可以轻松自动地检查和更新框架中的Bean状态,其中许多框架都包含针对各种类型的属性的自定义编辑器。
该类应可序列化。这允许应用程序和框架以独立于VM和平台的方式可靠地保存,存储和还原Bean的状态。
因为这些需求主要通过约定而不是通过实现接口来表达,所以某些开发人员将JavaBeans视为遵循特定命名约定的Plain Old Java Object。
POJO
普通旧Java对象或POJO是最初引入的一个术语,用于指定简单的轻量级Java对象,而不实现任何javax.ejb接口,而不是重量级的EJB 2.x(特别是实体Bean,无状态会话Bean并不是那么糟糕的IMO)。今天,该术语用于任何没有多余东西的简单对象。同样,维基百科在定义POJO方面做得很好:
POJO是Plain Old Java Object的首字母缩写。该名称用来强调所讨论的对象是普通的Java对象,而不是特殊的对象,尤其不是Enterprise JavaBean(尤其是在EJB 3之前)。这个词是由马丁·福勒(Martin Fowler),丽贝卡·帕森斯(Rebecca Parsons)和乔什·麦肯齐(Josh MacKenzie)在2000年9月创造的:
“我们想知道为什么人们不反对在他们的系统中使用常规对象,并得出结论,这是因为简单对象缺乏奇特的名称。所以我们给了他们一个名称,并且很好地流行了。”
对于未使用新功能的技术,例如电话中的POTS(普通老式电话服务)和C ++中定义但仅使用C语言功能的PODS(普通老式数据结构),该术语延续了较旧术语的模式。和Perl中的POD(普通旧文档)。
该术语很可能已被广泛接受,因为需要与复杂的对象框架形成对比的通用且易于理解的术语。JavaBean是可序列化的POJO,具有无参数构造函数,并允许使用getter和setter方法访问属性。Enterprise JavaBean不是单个类,而是整个组件模型(同样,EJB 3降低了Enterprise JavaBeans的复杂性)。
随着使用POJO的设计变得越来越普遍,出现了一些系统,这些系统为POJO提供了框架中使用的某些功能,并为实际需要的功能领域提供了更多选择。Hibernate和Spring是示例。
价值对象
值对象或VO是诸如java.lang.Integer持有值之类的对象(因此为值对象)。对于更正式的定义,我经常参考Martin Fowler对Value Object的描述:
在《企业应用程序体系结构模式》中,我将值对象描述为一个小对象,例如货币或日期范围对象。它们的关键特性是它们遵循值语义而不是引用语义。
您通常可以告诉他们,因为它们的相等性概念不是基于身份的,而是如果两个值对象的所有字段都相等,则它们相等。尽管所有字段都相等,但是如果子集是唯一的,则无需比较所有字段-例如,货币对象的货币代码足以测试相等性。
一般的启发式方法是价值对象应该完全不可变。如果要更改值对象,则应使用新对象替换该对象,并且不允许更新该值对象本身的值-可更新的值对象会导致混叠问题。
早期的J2EE文献使用值对象这个术语来描述一个不同的概念,我称之为数据传输对象。此后,他们改变了用法,改用术语“ 传输对象”。
您可以在Wiki 和Dirk Riehle的有价值的对象上找到更多的好材料。
数据传输对象
数据传输对象或DTO是EJB引入的(反)模式。它不是在EJB上执行许多远程调用,而是将数据封装在可以通过网络传输的值对象中:数据传输对象。维基百科对数据传输对象有一个不错的定义:
数据传输对象(DTO),以前称为值对象或VO,是一种设计模式,用于在软件应用程序子系统之间传输数据。DTO通常与数据访问对象结合使用,以从数据库中检索数据。
数据传输对象与业务对象或数据访问对象之间的区别在于,DTO除了存储和检索自己的数据(访问者和变异者)外,没有其他行为。
在传统的EJB体系结构中,DTO具有双重目的:首先,它们解决了实体bean无法序列化的问题;其次,它们隐式定义一个组装阶段,在该阶段中,将视图使用的所有数据都提取并编组到DTO中,然后再将控制权返回到表示层。
因此,对于许多人来说,DTO和VO是同一回事(但Fowler使用VO表示我们所看到的其他含义)。大多数时候,它们遵循JavaBeans约定,因此也是JavaBean。而且都是POJO。
本文向大家介绍基于java中的PO VO DAO BO POJO(详解),包括了基于java中的PO VO DAO BO POJO(详解)的使用技巧和注意事项,需要的朋友参考一下 一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的ava对象。 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合PO中应该不包含任何对数据库的操作。 二、VO
我不理解 如果a是假的,那么b是看的,但是条件没有被测试。 但。。。。 现在,如果a为真,那么b不被查看,条件不被测试。 这是为什么。我以为这个的目的 我有这个权利吗?如果我有,为什么会这样?
我从Spring开始学习MVC。我听说过很多次< code>Bean,它包含setter和getter。< code>Model基本上就是数据流,而< code>Pojo与< code>Bean相同。但是这个学期我真的很困惑,所有这些对我来说看起来都一样,你能解释一下它们之间的确切区别吗? JAVABEAN 波乔 型
问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子:
问题内容: 因此,我有一段简单的代码可以打印出整数1-10: 然后,如果仅在第3行上更改一个运算符,它将打印出无限数量的1整数(我知道为什么会这样做)。为什么在运行第二个程序时没有出现语法错误?如果赋值运算符后面跟着一个加法运算符,它不会调用语法错误吗? 问题答案: 与相同, 只是意味着。