重构-改善既有代码的设计 读书心得(二)

目录第七章第八章 重新组织数据第九章第十章 简化函数调用第七章在对象之间搬移特性如果一个类有太多行为,或者与另一个类有太多合作形成高度耦合,就可以搬移函数。如果被搬移函数只引用了原类的一个字段,那么只需将这个字段作为参数传递过来,如果调用了原类的函数,那么必须将源对象传递过来。如果需要很多原类特性,那就要进一步重构,比如分解目标函数,把其中一部分移回原类。move field对于一个...
摘要由CSDN通过智能技术生成

第七章

  1. 在对象之间搬移特性
    在这里插入图片描述
    如果一个类有太多行为,或者与另一个类有太多合作形成高度耦合,就可以搬移函数。如果被搬移函数只引用了原类的一个字段,那么只需将这个字段作为参数传递过来,如果调用了原类的函数,那么必须将源对象传递过来。如果需要很多原类特性,那就要进一步重构,比如分解目标函数,把其中一部分移回原类。
  2. move field
    对于一个字段,如果另一个类有更多函数使用了它,就可以考虑move。如果是public的字段,考虑先封装起来。本书写的有点早,现代java ide早就有成熟的move field refactor工具了。可以先利用ide迁移过来,再考虑是否要做封装。
  3. 提炼类
    在这里插入图片描述
    实际工作中,类会不断成长扩展,一开始可能只有一种功能,慢慢地随着责任不断增加,类会变得过分复杂,此时你需要考虑哪些部分可以分离出去,形成一个单独的类。某些数据和函数总是一起出现,那么它们就应该分离出去。还有一个extract class的信号:如果你发现子类化只影响类的部分特性,或者某些特性需要以另一种方式来子类化,这就意味着你需要分解原来的类。
    有一个需要考虑的事情是是否公开新类,这个需要具体情况具体分析。
  4. inline class
    在这里插入图片描述
    如果一个类不再承担足够责任,挑选这一萎缩类的最频繁用户,以inline class手法将萎缩类塞进另一个类中。
  5. 隐藏委托关系 hide delegate
    如果client先通过服务对象的字段得到另一个对象,然后调用后者的函数,那么客户就必须知晓这一层委托关系。万一委托关系变化,client也得相应变化。可以在服务对象上放置一个委托函数,将委托关系隐藏起来。这样即使委托关系发生变化,变化也被限制在服务对象中,不会波及客户。
    在这里插入图片描述
  6. 移除中间人 remove middle man
    跟上一条是相反的,如果频繁使用上一条,会导致委托函数越来越多,服务类完全变成了一个中间人,此时你就应该让client直接调用受托类。
    这两条规则怎么使用取决于系统需要的隐藏的程度。不过重构的好处是你不必现在就做决定,你可以在系统运行过程中不断进行调整。随着系统的变化,合适的隐藏程度这个尺度也相应改变。重构的意义:你永远不必说对不起,只要把出问题的地方修补好就行了。
  7. 引入外加函数
    你正在使用一个第三方类,它很好用,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是本书原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。本书也因此成为与《设计模式》齐名的经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。 本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。 第1章 重构,第一个案例 1.1 起点 1.2 重构的第一步 1.3 分解并重组statement() 1.4 运用多态取代与价格相关的条件逻辑 1.5 结语 第2章 重构原则 2.1 何谓重构 2.2 为何重构 2.3 何时重构 2.4 怎么对经理说 2.5 重构的难题 2.6 重构设计 2.7 重构与性能 2.8 重构起源何处 第3章 代码的坏味道 3.1 Duplicated Code(重复代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大的类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shotgun Surgery(霰弹式修改) 3.7 Feature Envy(依恋情结) 3.8 Data Clumps(数据泥团) 3.9 Primitive Obsession(基本类型偏执) 3.10 Switch Statements(switch惊悚现身) 3.11 Parallel InheritanceHierarchies(平行继承体系) 3.12 Lazy Class(冗赘类) 3.13 Speculative Generality(夸夸其谈未来性) 3.14 Temporary Field(令人迷惑的暂时字段) 3.15 Message Chains(过度耦合的消息链) 3.16 Middle Man(中间人) 3.17 Inappropriate Intimacy(狎昵关系) 3.18 Alternative Classes with Different Interfaces(异曲同工的类) 3.19 Incomplete Library Class(不完美的库类) 3.20 Data Class(纯稚的数据类) 3.21 Refused Bequest(被拒绝的遗赠) 3.22 Comments(过多的注释) 第4章 构筑测试体系 4.1 自测试代码的价值 4.2 JUnit测试框架 4.3 添加更多测试 第5章 重构列表 5.1 重构的记录格式 5.2 寻找引用点 5.3 这些重构手法有多成熟 第6章 重新组织函数 6.1 Extract Method(提炼函数) 6.2 Inline Method(内联函数) 6.3 Inline Temp(内联临时变量) 6.4 Replace Temp with Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引入解释性变量) 6.6 Split Temporary Variable(分解临时变量) 6.7 Remove Assignments to Parameters(移除对参数的赋值) 6.8 Replace Method with Method Object(以函数对象取代函数) 6.9 Substitute Algorithm(替换算法) 第7章 在对象之间搬移特性 7.1 Move Method(搬移函数) 7.2 Move Field(搬移字段) 7.3 Extract Class(提炼类) 7.4 Inline Class(将类内联化) 7.5 Hide Delegate(隐藏“委托关系”) 7.6 Remove Middle Man(移除中间人) 7.7 Introduce Foreign Method(引入外加函数) 7.8 Introduce Local Extension(引入本地扩展) 第8章 重新组织数据 8.1 Self Encapsulate Field(自封装字段) 8.2 Replace Data Value with Object(以对象取代数据值) 8.3 Change Value to Reference(将值对象改为引用对象) 8.4 Change Reference to Value(将引用对象改为值对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值