什么是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;
... ...
}