发散式变化(Divergent Change)类似于霰弹式修改(Shotgun Surgery),但实际上完全不同。发散式变化(Divergent Change)在一个类中修改多处。霰弹式修改(Shotgun Surgery)指的是同时对多个类进行单一的修改。 特征 你发现你想要修改一个函数,却必须要同时修改许多不相关的函数。例如,当你想要添加一个新的产品类型时
【摘要】 代码重构:发散式变化 什么是发散式变化(Divergent Change) 定义: 某个模块经常因为不同的原因在不同的方向上发生变化 影响: 通常,发散式变化是由于多个变化方向之间有较多的来回调用或者函数内部混合了多类处理逻辑。当处于多个不同上下文的外部行为发生变化时候,都会引起对同一个类或模块的修改,影响了代码...
以下是一些常见的发散式变化重构方式: 1. 单一职责原则(SRP) 单一职责原则是指一个类或模块应该只有一个引起它变化的原因。如果一个类承担了多个职责,就需要将其拆分成多个独立的类。这样每个类只需要关注自己的职责,代码更加清晰和易于理解。 2. 提取方法(Extract Method) 当一个方法中包含了多个不同的职责时,...
Divergent Change 发散式变化 描述:一个类被锚定了多个变化,当这些变化中的任意一个发生时,就必须对类进行修改。 解释:一个类最好只因一种变化而被修改 操作:你应该找出某特定原因而造成的所有变化,然后运用Extract Class将它们提炼到另一个类中。 6. Shotgun Surgery 散弹式修改 描述:一种变化引发程序多处的修...
发散式变化: --出现效果: 如果对程序进行例行维护的时候, 添加修改组件的时候, 要同时修改一个类中的多个方法, 那么这就是 Divergent Change; --修改方法: 找出造成发散变化的原因, 使用Extract Class(提炼类)将需要修改的方法集中到一个类中; 6. 霰弹式修改 (Shotgun Surgery) ...
DivergentChange(发散式变化)---要重构的信号 “当你看着⼀个类说,呃,如果新加⼊⼀个数据库,我必须修改这三个函数;如果新出现⼀种⾦融⼯具,我必须修改这四个函数。那么,此时也许将这个类分成两个会更好,这么⼀来每个对象就可以只因⼀种变化⽽需要修改。”上述特征的名称叫做:Divergent ...
Divergent Change(发散式变化) 指的是“某一个类受到多种变化的影响”,A/B/C/D……多种功能变化的时候它都需要修改。 病因大致是某个类负担了多项任务,太操心了。很可能需要再拆分几个类出来,把变化封装得更细。 以前我写代码的时候有一个例子,曾经有一段时间,P_Unit类处理所有BSC单元的逻辑,但各种单板的...
发散式变化 描述:一个类被锚定了多个变化,当这些变化中的任意一个发生时,就必须对类进行修改。 解释:一个类最好只因一种变化而被修改 操作:你应该找出某特定原因而造成的所有变化,然后运用Extract Class将它们提炼到另一个类中。 6. Shotgun Surgery ...
发散式变化: --出现效果: 如果对程序进行例行维护的时候, 添加修改组件的时候, 要同时修改一个类中的多个方法, 那么这就是 Divergent Change; --修改方法: 找出造成发散变化的原因, 使用Extract Class(提炼类)将需要修改的方法集中到一个类中; 6. 霰弹式修改 (Shotgun Surgery) ...
发散式变化 多个业务发生变化时,修改的都是同一个类,说明此类承担的职责过多,可以运用Extract Class(提炼类)根据业务提炼到不同的类中。 举个例子,比如一个电商系统,有一个商品类,商品类中有计算价格和查询库存等方法: 霰弹式修改 一旦有业务修改,需要修改程序的多处,这种坏味道可以用Move Method(搬移函数)和Mov...