重构章三笔记

259 阅读2分钟

《重构:改善既有代码的设计(第2版)》 ePUBw.COM 47个笔记

这些注释之所以存在乃是因为代码很糟糕

注释

不要虚情假意地糊弄继承体系,应该运用以委托取代子类

拒绝支持超类的接口,这就难以接受了

Refused Bequest

这种结果数据对象有一个关键的特征:它是不可修改的

纯数据类

Alternative Classes with Different Interfaces

Large Class

以委托取代子类(381)或以委托取代超类(399)让它离开继承体系

如果两个模块有共同的兴趣,可以尝试再新建一个模块,把这些共用的数据放在一个管理良好的地方;或者用隐藏委托关系(189),把另一个模块变成两者的中介。

Insider Trading

某个类的接口有一半的函数都委托给其他类,这样就是过度运用

Middle Man

如果还有许多客户端代码需要访问链上的其他对象,同样添加一个函数来完成此事。

先观察消息链最终得到的对象是用来干什么的,看看能否以提炼函数(106)把使用该对象的代码提炼到一个独立的函数中,再运用搬移函数(198)把这个函数推入消息链

Message Chains

使用引入特例(289)在“变量不合法”的情况下创建一个替代对象,从而避免写出条件式代码

使用提炼类(182)给这个可怜的孤儿创造一个家,然后用搬移函数(198)把所有和这些字段相关的代码都放进这个新家

临时字段

夸夸其谈通用性

冗赘的元素

以管道取代循环

循环语句

重复的switch

基本类型偏执

一个函数跟另一个模块中的函数或者数据交流格外频繁,远胜于在自己所处模块内部的交流

数据泥团

依恋情结

霰弹式修改

拆分

发散式变化

使用以查询取代派生变量

确保调用者不会调到有副作用的代码

将查询函数和修改函数分离

提炼函数

移动语句

拆分变量

封装变量

如果要更新一个数据结构,就返回一份新的数据副本,旧的数据仍保持不变。

函数式编程

2023/7/24 发表想法 React 源码也是啊

从代码库的任何一个角落都可以修改它

全局数据

过长参数列表

过长函数

重复代码

◆ 第3章 代码的坏味道

神秘命名