`
王杲杲
  • 浏览: 44384 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

“学习OO好榜样”之Divergent Change(发散式变化)、Shotgun Surgery(霰弹式修改)

 
阅读更多
Divergent Change(发散式变化)
指的是“某一个类受到多种变化的影响”,A/B/C/D……多种功能变化的时候它都需要修改。
病因大致是某个类负担了多项任务,太操心了。很可能需要再拆分几个类出来,把变化封装得更细。
以前我写代码的时候有一个例子,曾经有一段时间,P_Unit类处理所有BSC单元的逻辑,但各种单板的逻辑是不一样的,于是DTB改逻辑的时候要修改P_Unit、ABPM改的时候要修改P_UNit、甚至HDLC/UID等逻辑修改的时候P_Unit都要改。显然该类管得太多了。后来,我看了<重构>这本书,痛下决心做了重构。想起来03年,徐峰做配置CAF的时候建议我每个板子一个类,我完全不以为然。显然当初没有理解“封装变化”这四个字。
 
Shotgun Surgery(霰弹式修改)
指的是“一个变化引发多个类的修改”,完成某个需求的时候,A/B/C/D……多个类都需要修改。
病因大致是多个类之间的耦合太严重。很可能是类没有规划好,没有把变化封装得足够令人满意。
记得水手好像说过,去掉这个Bad Smell不好强求。也有些道理。而且举出Abstract Factory模式作为例证。
但我们要清楚的认识到我们努力的方向,Abstract Factory模式同样不完美,它没有满足Open-Close原则。我们可以在某些条件(包括技术条件)受限的时候写出不完美的代码,但一定要知道它是不完美的。
分享到:
评论
2 楼 王杲杲 2007-01-22  
多谢提醒。
这些小体会是放这备份的,顺便选中了check box。hoho
1 楼 ITeye管理员 2007-01-22  
你在java版面发的几篇文章,我都给隐藏了,原因是,你一次性发表相同类别的帖子过多,而且,帖子太短,最好是发一篇主贴,其他的内容以跟贴形式发表。

这次隐藏没有扣分,请重新编辑你的帖子后,再次发表。谢谢。

相关推荐

    重构-改善既有代码的设计+中文版

     Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋   Data Clumps 数据泥团   Primitive Obsession 基本类型偏执   Switch Statements switch语句   Parallel ...

    重构——改善既有代码的设计

     Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋   Data Clumps 数据泥团   Primitive Obsession 基本类型偏执   Switch Statements switch语句   Parallel ...

    重构-改善既有代码的设计(中文版)

     Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋   Data Clumps 数据泥团   Primitive Obsession 基本类型偏执   Switch Statements switch语句   Parallel ...

    重构,改善既有代码的设计

     Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋   Data Clumps 数据泥团   Primitive Obsession 基本类型偏执   Switch Statements switch语句   Parallel...

    重构 改善既有代码的设计

     Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋   Data Clumps 数据泥团   Primitive Obsession 基本类型偏执   Switch Statements switch语句   Parallel...

    重构_改善既有代码的设计

    6. 霰弹式修改(Shotgun Surgery):与发散式变化相对,霰弹式修改是指每当发生一个变化时,都需要对多个类进行修改,这时需要通过合并类来减少这种修改。 7. 特设的解决方案(Special-Casing):代码中出现的特定...

    9-重构1

    Divergent Change(发散式变化)意味着不同的行为变化导致相同的代码修改,可以考虑使用策略模式。Shotgun Surgery(霰弹式修改)表明修改一处功能需要改动多处代码,可以通过封装相关功能来集中修改点。Feature ...

    重构-改善既有代码的设计-课件.ppt

    - **霰弹式修改(Shotgun Surgery)**:与发散式变化相反,这种情况下一个变更需要修改多个不同的类。可以通过将相关功能集中到一个类中来优化。 - **依恋情结(Feature Envy)**:当一个类依赖于另一个类的数据成员...

    重构代码笔记1

    发散式变化(Divergent Change)和霰弹式修改(Shotgun Surgery)意味着一个类或函数在多个上下文中被修改,应通过拆分、提炼函数或类来改善。 依恋情结(Feature Envy)指函数对其他模块的数据过于依赖,考虑将...

    重构-改善既有代码的设计

    3.5 Divergent Change(发散式变化) 79 3.6 Shotgun Surgery(霰弹式修改) 80 3.7 Feature Envy(依恋情结) 80 3.8 Data Clumps(数据泥团) 81 3.9 Primitive Obsession(基本类型偏执) 81 3.10 ...

    重构:改善既有代码的设计.[美]Martin Fowler.epub【文字版手机格式】

    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惊悚现身)...

    重构那点事情

    5. **发散式变化 (Divergent Change)**:不同部分的代码因为相似的功能而需要相同的修改。 6. **霰弹式修改 (Shotgun Surgery)**:为了修改一处逻辑不得不改动多处代码。 7. **依恋情结 (Feature Envy)**:一个类...

    编写Java程序最容易犯的21种错误

    5. **霰弹式外科手术 (Shotgun Surgery)** - 修改一处代码需要同时修改多处。这表明设计不够凝聚,需要重新组织,使相关部分更集中。 6. **羡慕属性 (Feature Envy)** - 当一个类的方法频繁操作其他类的属性,...

    在eclipse中实施重构.pdf

    - **发散式变化 (Divergent Change)**:当一个类被多个不同方向的需求所改变时。 - **霰弹式修改 (Shotgun Surgery)**:修改一处代码需要同时改动多个地方。 - **依恋情结 (Feature Envy)**:一个类过度依赖于另一个...

Global site tag (gtag.js) - Google Analytics