重构:封装记录

曾用名:以数据类取代记录(Replace Record with Data Class)

//重构前

organization = {name: "Acme Gooseberries", country: "GB"};

//重构后

class Organization{

        constructor(data){

                this.name = data.name;

                this._country = data.country;

        }

        get name(){return this._name;}

        set name(arg){this._name = arg;}

        get country(){return this._country;}

        set country(arg){this._country = arg;}

}

做法:

1、对持有记录的变量使用【封装变量】,将其封装到一个函数中。

记得为这个函数取一个容易搜索的名字

2、创建一个类,将记录包装起来,并将记录变量的值替换为该类的一个实例,然后在类上定义一个访问函数,用于返回原始的记录,修改封装变量的函数,令其使用这个访问函数。

3、测试

4、新建一个函数,让它返回该类的对象,而非那条原始的记录。

5、对于该记录的每处使用点,将原先返回记录的函数调用替换为那个返回实例对象的函数调用。使用对象上的访问函数来获取数据的字段,如果该字段的访问函数还不存在,那就创建一个,每次更改之后运行测试。

        如果该记录比较复杂,例如是个嵌套解构,那么先重点关注客户端对数据的更新操作,对于读取操作可以考虑返回一个数据副本或只读的数据代理。

6、移除类对原始记录的访问函数,那个容易搜索的返回原始数据的函数也要一并删除。

7、测试

8、如果记录中的字段本身也是复杂结构,考虑对其再次应用【封装记录】或【封装集合】手法 。

你可能感兴趣的:(重构)