js设计模式之(传输对象模式)

传输对象模式

传输对象模式(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

发布了128 篇原创文章 · 获赞 113 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/vv_bug/article/details/103861249