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原则。我们可以在某些条件(包括技术条件)受限的时候写出不完美的代码,但一定要知道它是不完美的。
指的是“某一个类受到多种变化的影响”,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原则。我们可以在某些条件(包括技术条件)受限的时候写出不完美的代码,但一定要知道它是不完美的。
评论
王杲杲
2007-01-22
多谢提醒。
这些小体会是放这备份的,顺便选中了check box。hoho
这些小体会是放这备份的,顺便选中了check box。hoho
JavaEye管理员
2007-01-22
你在java版面发的几篇文章,我都给隐藏了,原因是,你一次性发表相同类别的帖子过多,而且,帖子太短,最好是发一篇主贴,其他的内容以跟贴形式发表。
这次隐藏没有扣分,请重新编辑你的帖子后,再次发表。谢谢。
这次隐藏没有扣分,请重新编辑你的帖子后,再次发表。谢谢。
- 浏览: 27162 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
“学习OO好榜样”之软件质 ...
《Java与模式》中前几章详析了对象设计的原则与方法!
-- by pdw2009 -
“学习OO好榜样”之软件质 ...
关于如何设计低耦合的系统,建议看看《敏捷软件开发:原则、模式与实践》。
-- by yiding_he -
“学习OO好榜样”之软件质 ...
设计模式确实是学习和领悟oo的好东西
-- by Calmfeeling -
“学习OO好榜样”之软件质 ...
这个只能叫做源代码质量属性
-- by gurudk -
“学习OO好榜样”之面向对 ...
都是理论的东西了,能不能结合实际的说一说呢?
-- by spiritfrog






评论排行榜