`
zero696295
  • 浏览: 53812 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ValueObject 介绍(VO 模式)[转]

阅读更多

简单说,ValueObject的值(状态)一旦创建以后就不会改变了。所以可以当基本数据类型用。比如Java中的String, BigDecimal, BigInteger都是ValueObject。StringBuffer就不是。

VO就是DTO,是一种设计模式,主要用于减少数据传送次数,常用在EJB中,现在的Struts项目中也提倡使用这种设计模式,DAO是一种访问数据库的设计模式,大概的思路就是将对一个数据库(和一个数据表)的操作封装到一个类中,由其他的类来调用这个类的方法完成对数据库的操作,这样可以简化负责业务处理的类的复杂性和耦合性

DTO是介于WEB层与EJB层中间的一层,一般采用数据传输对象工厂来满足这种模式的设计需求。DTO    Factory是与具体用例相关的DTO逻辑的唯一驻留点,它可以帮助将客户端与域模型分离。

DTO就是数据传输对象(Data Transfer Object)的缩写。

DTO模式或称VO模式,是指将数据封装成普通的JavaBeans,在J2EE多个层次之间传输。

DTO类似信使,是同步系统中的Message。

该JavaBeans可以是一个数据模型Model。

常见的方式就是为实体对象建立一个Model类,该类只包含这个对象所有字段的getter和setter。例如用户User实体有name, password字段,则建立一个UserModel类,public方法有getName,setName,getPassword,setPassword。这样就可以把UserForm作为参数传给其他函数。

Data Transfer Object(DTO)模式是为了解决这样的问题:例如我们的一个实体Bean,其对应的数据库表的字段非常多,那么我们在其Home接口的create方法中以及Enterprise Bean类的ejbCreate方法中的参数可能就会很多,导致我们的这些方法不够elegant。我们可以通过定义一个简单的Java类(实现Serializable接口),其中定义一些属性,并提供相应的get和set方法来解决上面的问题。

使用ValueObject来封装业务数据,并且有一个单独的方法可以用来获取或者发送这个VO,当客户端请求一些业务数据的时候,服务端就可以产生出一个VO,并且将它赋值,最后,可以用传值的方法传递给客户端。
这样的好处是减少网络对话,加速层之间的数据交流,我觉得,这样更大的好处是使程序逻辑更加清楚,更加面向对象。写VO的时候,要实现Serializable接口。
public UserVO implements Serializable {
     private String loginId;
     private String password;
     private String name;
     private String role;
     ... ...
}

 

本文来自CSDN博客:http://blog.csdn.net/marshane/archive/2008/06/14/2548006.aspx

分享到:
评论

相关推荐

    Laravel开发-eloquent-value-object

    Laravel开发-eloquent-value-object 幼虫雄辩的值对象。

    value-objects:方便的Value Object类的集合

    舒适值对象 方便的Value Object类的集合。系统要求您需要PHP> = 7.4.0,但是建议使用最新的稳定版本PHP。安装使用Composer安装: $ composer require cozy/value-objects贡献欢迎捐款,我们将全额认捐。 有关详细...

    simple-value-object:Python中的Value Object实现

    from simple_value_object import ValueObject class Point ( ValueObject ): def __init__ ( self , x , y ): pass point = Point ( 1 , 2 ) point . x # 1 point . y # 2 point . x = 5 # ...

    一个由MVC设计模式开发的例子,初学FLEX设计模式很好的资源

    得到的一系列参数存储在ValueObject类的公共变量中,ValueObject类是继承cairngrom类中valueobject类的,并且ValueObject文件是一个绑定的类 实例化事件并且把绑定类作为参数带过去,派发此事件 var historypassvalue:...

    20-C-ValueObject-Code.zip

    这是关于值对象(VO)模式和数据传输对象(DTO)模式的初学者教程,并附有示例。值对象是其相等性基于值而不是标识的对象。数据传输对象是用于移动数据的数据容器。

    论文研究-J2EE平台下动态自定义VO设计与实现.pdf

    主要研究了J2EE平台下的模型元数据的封装,通过XML技术和J2EE平台的完美结合,扩展了现行的Value Object功能,实现了数据的双向交互,用户可以在运行期改变VO结构。

    实用J2EE设计模式编程指南

    Value Object模式 Service Locator模式 使用持久性框架 持久性框架策略 小结 第4章 改进性能与伸缩性的设计模式 性能问题的原因 伸缩性问题的原因 城市休假订票应用程序 标识提高性能的模式 标识提高伸缩性的模式 ...

    JavaScript中的object转换函数toString()与valueOf()介绍

    JavaScript中,object转换为boolean的操作非常简单:所有的...在将object转换为string或者number时,JavaScript会调用object的两个转换函数:toString()与valueOf()。 toString() toString()函数的作用是返回object的字

    postcode:英国邮政编码ValueObject

    英国邮政编码ValueObject概要代表英国邮政编码的安装这是一个composer.json文件的最小示例,该文件仅定义了对邮政编码的依赖: { "require": { "vasildakov/postcode": "^1.1" }}程式码范例创建一个邮政编码对象 use...

    Record to ValueObject - ASCII/JavaBean-开源

    Record to ValueObject 是一种实用程序,用于读取表示数据的 ASCII 文件(固定或 CSV),按行和列(记录和字段)组织,并使用每条记录的内容填充 ValueObject。 用于以语义方式读取/导入文本数据

    php-value-object:另一个用于处理Value Objects并防止Primitive Obsession的不良习惯的库

    php-value-object:另一个用于处理Value Objects并防止Primitive Obsession的不良习惯的库

    POBOVODTOPOJODAO.zip_dto_java dto dao_java vo_qovod

    PO可以严格对应数据库表,一张表对映一个PO。... VO:value object值对象、view object视图对象 PO:持久对象 QO:查询对象 DAO:数据访问对象——同时还有DAO模式 DTO:数据传输对象——同时还有DTO模式

    get-js-object-key-value:获取一个JS对象的key和value

    get-js-object-key-value 返回给定 JS 对象的键和值 应用程序接口 var getKeyValue = require('get-js-object-key-value') getKeyValue(对象: JSObject ) JSObject可以是具有一个或多个属性的对象 返回 一个...

    python 使用Flask 出现 ValueError: Expected object or value 问题解决

    问题描述: 经过各种百度,搜资料,发现了这样的问题。 这里记录一下,以防以后再犯这样的错误。 我用pandas来读取json文件 调试是正常的。 服务跑起来是出现这样了这样的错误。 ...首先我的manager....

    NC总帐API帮助文档

    继承者 nc.vo.pub.ValueObject 继承者 nc.vo.gl.pubvoucher.DetailVO 所有已实现的接口: java.io.Serializable, java.lang.Cloneable, java.util.EventListener, nc.vo.gl.vouchervaluechange....

    基于e^3value的B2C电商商业模式研究——对比分析天猫商城与京东商城.pdf

    基于e^3value的B2C电商商业模式研究——对比分析天猫商城与京东商城.pdf

    RIA框架Cairngorm

    VO( Value Object):储存特定值对象变量。 VIew(视图V):将Model的数据绑定互组件并广播侦听Cairngorm Event; Controller(控制器):侦听Cairngorm事件并将其映射到Cairngorm Command; Command(命令):调用...

    Android代码-GoogleAutoValue扩展类

    Include auto-value-cursor in your project and add a static factory method to your auto-value object. import com.gabrielittner.auto.value.cursor.ColumnName; @AutoValue public abstract class User { ...

    php程序设计模式chm文档

    第二章 值对象模式(The Value Object Pattern) 第三章 工厂模式(The Factory Pattern) 第四章 单件模式 第五章 注册模式 第六章 伪对象模式 第七章 策略模式 ·· ··· ··· 有兴趣的自已下载看一看吧,比较...

Global site tag (gtag.js) - Google Analytics