`
Struts_Spring
  • 浏览: 105570 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

什么是ValueObject (VO 模式)

    博客分类:
  • J2EE
阅读更多

什么是ValueObject

简单说,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;
         ... ...
    }

  • 分享到:
    评论

    相关推荐

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

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

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

      20-C-ValueObject-Code.zip

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

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

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

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

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

      实用J2EE设计模式编程指南

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

      Laravel开发-eloquent-value-object

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

      postcode:英国邮政编码ValueObject

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

      POBOVODTOPOJODAO.zip_dto_java dto dao_java vo_qovod

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

      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的不良习惯的库

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

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

      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可以是具有一个或多个属性的对象 返回 一个...

      实验室排课系统.rar

      老版本的配置文件样例: org.hibernate.dialect.... <value>vo/Users.hbm.xml</value> <value>vo/Firstdate.hbm.xml</value> <value>vo/Arrangement.hbm.xml</value> </property>

      NC总帐API帮助文档

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

      RIA框架Cairngorm

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

      validate-value:validate-value根据JSON模式验证值

      验证值validate-value根据JSON模式验证值。状态类别状态版 依存关系 开发依赖 建立 执照安装$ npm install validate-value快速开始首先,您需要将validate-value集成到您的应用程序中: const { Value , isOfType } ...

      什么叫key-value数据库

      想要明白什么是key/value数据库,就必须了解哈希表(Hash Table)这种数据结构。 比如,Berkley DB就是典型的key/value数据库。

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

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

      java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

      java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...

    Global site tag (gtag.js) - Google Analytics