Extract Class(提炼类)
来源:互联网 发布:ppty聚力网络电视 编辑:程序博客网 时间:2024/05/16 07:55
某个类做了应该由两个雷做的事。
建立一个新类,将相关的字段和函数从旧类搬移到新类。
1. 动机
- 你也许听过类似这样的教诲:一个类应该是一个清楚的抽象,处理一些明确的责任。但是在实际工作中,类会不断成长扩展。你会在这儿加入一些功能,在那儿加入一些数据,给某个类添加一箱新责任时,你会觉得不知为这项责任分离出一个单独的类。于是,随着责任不断增加,这个类会变得过分复杂。很快,你的类就会变成一团乱麻。
- 这样的类往往含有大量函数和数据。这样的类往往太大而不易理解。此时你需要考虑哪些部分可以分离出来,并将它们分离到一个单独的类。如果某些数据和某些函数总是一起出现,某些数据经常同时变化甚至彼此相依,这就表示你应该将它们分离出去。一个有用的测试就是问你自己,如果你搬移了某些字段和函数,会发生什么事情?其他字段和函数是否因此变得无意义?
- 另一个往往在开发后期出现的信号是类的子类化方式。如果你发现子类化只影响类的部分特性,或如果你发现某些特性需要以一种方式来子类化,某些特性则需要以另一种方式子类化,这就意味你需要分解原来的类。
2. 做法
- 决定如何分解类所负的责任。
- 建立一个新类,用以表现从旧类中分离出来的责任。
1)如果旧类剩下的责任与旧类名称不符,为旧类更名。 - 建立“从旧类访问新类”的连接关系。
1)有可能需要一个双向连接。但是在真正需要它之前,不要建立“从新类通往旧类”的连接。 - 对于你想搬移的每一个字段,运用Move Field(搬移字段:在目标类新建一个字段,修改源字段的所有用户,零它们改用新字段)搬移之。
- 每次搬移后,编译、测试。
- 使用Move Method将必要函数搬移到新类。先搬移较低层函数(“被其他函数调用”多与“调用其他函数”者),在搬移教高层函数。
- 每次搬移之后,编译、测试。
- 检查,精简每个累的接口。
1)如果你建立起双向连接,检查是否可以将它改成单项连接。 - 决定是否公开新类。如果你的确需要公开它,就要决定让它成为引用对象还是不可变的值对象。
阅读全文
0 0
- Extract Class(提炼类)
- Extract Class(提炼类)
- 7.3extract class(提炼类)
- 在对象之间搬移特性之三 :Extract Class(提炼类)
- Extract Subclass(提炼子类)
- Extract Interface(提炼接口)
- 11.7 extract superclass (提炼超类)
- 6.1 Extract Method(提炼函数)
- 处理概括关系之七 :Extract Superclass(提炼超类)
- Extract Method( 提炼函数 )
- 提炼方法 Extract Method
- 提炼常量 Extract Constant
- Extract Method 提炼函数
- 处理概括关系之六 :Extract Subclass(提炼子类)
- 处理概括关系之八 :Extract Interface(提炼接口)
- 重构--Extract Method(提炼函数)(四)
- 11.6 extract subclass 提炼子类
- 11.8 extract interface(提炼接口)
- 玲珑杯 1128
- 服务器数据库相关的网络连接设置
- jsp内置对象 --6.15
- BZOJ4027: [HEOI2015]兔子与樱花
- 刷清橙OJ--A1073.矩阵运算
- Extract Class(提炼类)
- 高数精髓——极限存在、连续、可导、可微和可积之间的联系
- ruby中to_proc方法
- 362. Design Hit Counter
- CMMI5访谈学习笔记(项目经理角色)
- 转发和重定向
- servlet2 --6.16
- 开源 java CMS
- 【C#】HID API