传输对象模式
传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据。传输对象也被称为数值对象。传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列化的,所以它可以通过网络传输。它没有任何的行为。服务器端的业务类通常从数据库读取数据,然后填充 POJO,并把它发送到客户端或按值传递它。对于客户端,传输对象是只读的。客户端可以创建自己的传输对象,并把它传递给服务器,以便一次性更新数据库中的数值。以下是这种设计模式的实体。
- 业务对象(Business Object) - 为传输对象填充数据的业务服务。
- 传输对象(Transfer Object) - 简单的 POJO,只有设置/获取属性的方法。
- 客户端(Client) - 客户端可以发送请求或者发送传输对象到业务对象。(response数据实体类)
优点:
- 减少网络流量
- 简化远程对象和远程接口
- 在更少的远程调用中传输更多数据
- 减少代码重复
缺点:
- 由于同步和版本控制而增加了复杂性。
适用场景
- 客户要求提供多种信息。而且信息是相关的。(比如用户信息管理,姓名、年龄…)
- 当你想提高性能以获取资源时。(一次请求获取全部的用户信息等等)
- 您希望减少远程呼叫的数量 (比如用户信息管理,姓名、年龄同时修改…)
作业:
用传输对象模式实现一个用户的增删查改
User.js
class User {
constructor(build) {
this.name = build.name;
this.id = build.id;
}
getId() {
return this.id;
}
setId(id) {
this.id = id;
}
getName() {
return this.name;
}
setName(name) {
this.name = name;
}
}
class Build {
constructor(id) {
this.id = id; //必须填写的参数
}
setId(id) {
this.id = id;
return this;
}
setName() {
this.name = name; //可选参数
return this;
}
build() {
return new Student(this);
}
}
User.Build = Build;
export default User;
UserManager.js
export default class UserManager {
constructor() {
this.users = [];
}
add(user) {
this.users.push(user);
}
delete(id) {
let index = this.get(id);
if (index !== -1) {
return this.users.splice(index, 1);
}
return false;
}
get(id) {
let result = -1;
this.users.forEach((user) => {
if (id === user.getId()) {
result = id;
return;
}
});
return result;
}
update(user) {
let index = this.get(user.getId());
if (index !== -1) {
this.users[index]=user
}
return false;
}
}
参考:
https://www.runoob.com/design-pattern/design-pattern-tutorial.html