因为中间看了一本其他的书,差不多一个月未跟新读书笔记了,这段时间要补补课,接着上一章继续说说何时重构,文章中很多重构的方法这里还没有说明,后续章节会详细的介绍这些经常使用到的重构方法,尽请期待:

11、平行继承体系(Parallel):每当你为某个类增加一个子类的时候也必须为另一个类增加一个子类。如果你发现某个继承体系的名称前缀和另一个继承体系的名称前缀完全相同的时候就是需要重构的地方了。

12、冗赘类(Lazy Class):你创建的没一个类都得有人去理解它、维护它,这些工作都是要花钱的。如果一个类的所得不值其自身价值那么它就应该消失。

13、夸夸其他未来性(Speculative Generality):如果所有装置都会被用到,那就值得做;如果用不到,就不值得。它们只会挡你的路,所以,把它搬开吧。

14、令人迷惑的暂时值域(Temporary Field):有时你会看到这样的对象:其内某个instance变量仅为某种特定情势而设。这样的代码让人不易理解,因为你通常认为对象在所有时候都需要它的所有变量。你应该提炼类,然后把所有和这个变量相关的代码都放进这个新家。

15、过度耦合的消息链(Message Chains):用户向一个对象索求(request)另一个对象,然后再向后者索求另一个对象,然后再索求另一个对象……这就是消息链(Message Chains)。实际代码中你看到的可能是一长串getThis()或一长串临时变量。采取这种方式,将会导致紧密的耦合性,一旦对象间的关系发生任何变化,客户端就不得不作出相应修改。可以使用Hide Delegate方法进行重构,后续会讲解如何使用。

16、中间转手人(Middle Man):如果一个类接口有一半的函数都委托给其他的类,这样就是过度运用委托,这个时候你应该直接移除中间类,直接和实责对象打交道。

17、狎昵关系(Inappropriate Intimacy):有时你会看到两个类过于亲密,花费太多时间去探究彼此的私有成分。你可以采用 Move Method 和 Move Field 帮它们划清界线,从而减少狎昵行径。你也可以看看是否运用 Change Bidirectional Association to Unidirectional 让其中一个class对另一个斩断情丝。如果两个实在是情投意合,可以运用Extract Class 把两者共同点提炼到一个安全地点,让它们坦荡地使用这个新class。或者也可以尝试运用 Hide Delegate 让另一个class来为它们传递相思情。

18、异曲同工的类(Alternative Classes with Different Interfaces):两个函数做同一件事,确有着不同的签名式,请运用重命名的方式,按照它们的用途重新命名,并反复运用移动函数的方法将某些行为移入类中,直到其协议一致。

19、不完美的程序类库(Incomplete Library Class):许多程序都建立在封装好的类库上,有些类库并不是那么完美,如果你想要修改它们可以运用Introduce Foreign Method和Introduce Local Extension。

20、数据类(Data Class):数据类中不应有Public值域,如果含有容器类值域(Collection Fields),你应该检查它们是否得到了恰当的封装,对于不该被其他类修改的值域,请取消Setting方法。

21、被拒绝的遗赠(Refused Bequest):有时候继承一个类的子类并不需要使用全部父类的方法,大部分方法甚至与子类并无任何关系这时候你需要用委托的方式来代替继承(Replace Inheritance with Delegation)。

22、过多的注释(Comments):有时候因为代码很糟糕才写了长长的注释,这个时候尝试重构代码消除长长的注释。

已有 0 人发表留言,猛击->>这里<<-参与讨论

ITeye推荐

  • —软件人才免语言低担保 赴美带薪读研!—

转载于:https://www.cnblogs.com/TCrow/archive/2012/05/21/2868254.html

读书笔记之何时重构(下)相关推荐

  1. (swing读书笔记)JTable简介(下)

    (swing读书笔记)JTable简介(下) by cszhao1980 六.Row 最初,JTable没有提供任何"Row"相关的类来控制Row,与Row相关的大量操作直接坐落在 ...

  2. (swing读书笔记)JTree简介(下)

    (swing读书笔记)JTree简介(下) By cszhao1980 六.TreeCellRenderer 通过JTable一样,JTree也使用一个接口定义它的单元绘制器,该接口仅有一个方法: C ...

  3. Spring读书笔记——bean创建(下)

    有关Spring加载bean系列,今天这是最后一篇了,主要接上篇对于从Spring容器中获取Bean的一些细节实现的补充. <Spring读书笔记--bean加载>--Spring如何加载 ...

  4. 读书笔记之《重构》第三章—代码的坏味道

    第三章 代码的坏味道 这一章告诉我们,什么样的代码需要去重构,该用什么方法.寻找代码的坏味道,就是从代码中找出特定的结构,这些结构指出重构的可能性.寻找这些结构,需要学会判断,判断一个类里面有多少实例 ...

  5. 来自window Presentation Foundation Program Design的读书笔记 第五篇下

    我们来看下一个例子,这个例子将在一个button中放置一个stackpanel,然后在放置多个对象: 1: private void StackInButton() 2: { 3: Button bt ...

  6. Head First设计模式读书笔记八 第九章下 组合模式

    之前的总结链接: https://blog.csdn.net/u011109881/article/details/58710579 对比headFirst书中的例子,我觉得书中的组合模式的例子比上面 ...

  7. 『重构--改善既有代码的设计』读书笔记----序

    作为C++的程序员,我从大学就开始不间断的看书,看到如今上班,也始终坚持每天多多少少阅读技术文章,书看的很多,但很难有一本书,能让我去反复的翻阅.但唯独『重构--改善既有代码的设计』这本书让我重复看了 ...

  8. 重构(Refactoring)技巧读书笔记 之三

    重构(Refactoring)技巧读书笔记 之三<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...

  9. The Pragmatic Programmer 读书笔记之中的一个 DRY-Don’t Repeat Youself

     The Pragmatic Programmer读书笔记之中的一个 DRY-Don't Repeat Youself 尽管自己买了非常多软件project方面的书,可是由于时间的问题.一直没有静 ...

最新文章

  1. 【Android 启动过程】Activity 启动源码分析 ( Activity -> AMS、主线程阶段 )
  2. Another kind of Fibonacci
  3. JavaScript:动态选中CheckBox
  4. SICC大会发布银行、保险用户报告——详解C2B下的服务创新
  5. Windows编程之网络之邮件槽通讯
  6. python遍历文件夹下所有文件名中含有指定_Python 遍历目录找出包含指定字符串的文件夹...
  7. jq之slideup()
  8. html css 圆形按钮 仿uc,10款基于jquery的web前端动画特效
  9. C#值类型和引用类型的区别
  10. bili弹幕姬_B站弹幕姬插件——弹幕日志
  11. 日记500字初中计算机课,周末初中日记500字
  12. SQL Injection的猥琐技巧
  13. 用初等解法解特定差分方程(韦达定理的应用)
  14. UE4插件研发 So Easy
  15. 琴生Jensen不等式(期望意义下的形式)
  16. 2023最新猕猴桃影视系统源码/影视APP源码+安卓/苹果双端
  17. ChatGPT 体验和思考
  18. 微信小程序开发教程-微信小程序入门
  19. cad计算机在哪,Win7系统中cad临时文件保存在哪里
  20. K210学习笔记(十)——二维码识别

热门文章

  1. h5获取http请求头_React 前端获取http请求头信息
  2. 使用boost模板函数实现读写锁
  3. c++面向对象高级编程 学习七 转换函数
  4. 怎样从Linux终端管理进程:10个你必须知道的命令
  5. 原来公司需要这样的你
  6. 给手机浏览器减负 轻装上阵才能速度制胜
  7. jsp页面c标签循环map , c:foreach 循环map
  8. js 遍历对象的几种方法
  9. Django框架之Filters(过滤器)、母版的使用
  10. Tomcat 配置详解/优化方案