我是个Web前端出身,一直执着于View层的各种炫,Control的折腾也是为了迎合View,很少关心Model层的细枝末节,设甚至连J2EE里的各种Object都分不太清。
顿时想起了写这个的宗旨,所以,每一个很小很细枝末节的死角都值得淡定地坐下来,花十几分钟半个小时好好梳理一下。
DTO(Data Transfer Object:数据传输对象)模式,又称VO模式,是指将数据封装成普通的javaBeans, 在J2EE多个层次之间传输。
DTO类似信使,是同步系统中的Message的,该JavaBeans可以使一个数据模型,常见的方式是实体对象建立一个Model类,该类只包含这个对象所有字段的getter和setter。
例如用户user实体有name、password字段,则建立一个UserModel类,
publicclassUserModel {
private String name;
private String password;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPassword() {
returnpassword;
}
publicvoid setPassword(Stringpassword) {
this.password = password;
}
}
这样就可以把UserForm作为参数传递给其他函数。
Data Transfer Object(DTO)模式是为了解决这样的问题:
一个实体Bean,对应的数据库表的字段很多,我们在Home接口的create方法中以及Enterprise Bean类的ejbCreate方法中的参数可能就会很多,导致我们的这些方法不够elegant。
这时候,可以先定义一个简单的类,实现Serializable接口,定义一些属性,并提供相应的get和set方法来解决上面的问题。
这里我就不提供代码了,可以再举一个更具体的例子。
比如一张表有100个字段,那么对应的PO就有100个属性。但是界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO了!
小结一下Model、Domain object以及DTO关系:
1. 分析提炼Model是系统设计之起端
2. 系统设计之初,三者基本统一
3. 系统复杂化后,DTO可能是多个Model组合实现