发散式变化(Divergent Change)类似于霰弹式修改(Shotgun Surgery),但实际上完全不同。发散式变化(Divergent Change)在一个类中修改多处。霰弹式修改(Shotgun Surgery)指的是同时对多个类进行单一的修改。 特征 你发现你想要修改一个函数,却必须要同时修改许多不相关的函数。例如,当你想要添加一个新的产品类型时,你...
霰(xiàn)弹式修改意味着你的改动会造成大范围的影响,一处修改,到处修改。这句话也道出了重复代码的坏味道,所以想重复代码和重复Switch也都散发出了霰弹式修改的坏味道,这样的代码坏味道在代码中很常见,也较容易识别出来。 发散式变化,这个坏味道从字面上来看,是引起变化的原因很发散,就好比,我是一个初来乍到...
重构霰弹式修改: --代码集中到某个类中: 使用Move Method(搬移函数)和Move Field(搬移字段)把所有需要修改的代码放进同一个类中; --代码集中到新创建类中: 没有合适类存放代码, 创建一个类, 使用Inline Class(内联化类)方法将一系列的行为放在同一个类中; --造成分散式变化: 上面的两种操作会造成 Divergen...
想起来03年,徐峰做配置CAF的时候建议我每个板子一个类,我完全不以为然。显然当初没有理解“封装变化”这四个字。 Shotgun Surgery(霰弹式修改) 指的是“一个变化引发多个类的修改”,完成某个需求的时候,A/B/C/D……多个类都需要修改。 病因大致是多个类之间的耦合太严重。很可能是类没有规划好,没有把变化...
发散式变化 多个业务发生变化时,修改的都是同一个类,说明此类承担的职责过多,可以运用Extract Class(提炼类)根据业务提炼到不同的类中。 举个例子,比如一个电商系统,有一个商品类,商品类中有计算价格和查询库存等方法: 霰弹式修改 一旦有业务修改,需要修改程序的多处,这种坏味道可以用Move Method(搬移函数)和Mov...
发散式变化: --出现效果: 如果对程序进行例行维护的时候, 添加修改组件的时候, 要同时修改一个类中的多个方法, 那么这就是 Divergent Change; --修改方法: 找出造成发散变化的原因, 使用Extract Class(提炼类)将需要修改的方法集中到一个类中; 6. 霰弹式修改 (Shotgun Surgery) ...
发散式变化: --出现效果: 如果对程序进行例行维护的时候, 添加修改组件的时候, 要同时修改一个类中的多个方法, 那么这就是 Divergent Change; --修改方法: 找出造成发散变化的原因, 使用Extract Class(提炼类)将需要修改的方法集中到一个类中; 6. 霰弹式修改 (Shotgun Surgery) ...
发散式变化: --出现效果: 如果对程序进行例行维护的时候, 添加修改组件的时候, 要同时修改一个类中的多个方法, 那么这就是 Divergent Change; --修改方法: 找出造成发散变化的原因, 使用Extract Class(提炼类)将需要修改的方法集中到一个类中; 6. 霰弹式修改 (Shotgun Surgery) ...