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

我后来仔细想了想为什么我会对这个书如此“迷恋”?忽然之间,我意识到这本书真正意义上给我带来了工作的改变。不像别的技术书籍,可能你看过之后,你脑子里有个印象,但对于实践这块不能立马就做,所以往往印象不深。而这本重构,在你看完之后,你可以立马开刀阔斧去进行真正意义上的实践,而且收获颇多,乐此不疲。

接下来的日子,我将进行第四次『重构--改善既有代码的设计』的阅读,对于这本书,我也有了不一样的感情在里面。以前对于看书,没有写读书笔记的习惯,希望在这本书给我带来各种便利的同时,我也能够为它“做点什么”。呵呵,其实也是给自己加深印象的一种途径。因为“重构”我感觉目前国内开发者还不是特别熟悉,甚至有些程序员写了几年代码之后都不知道设计模式是什么东西。遇到项目,遇到代码,往往是想到什么就写什么。当遇到代码修改或者增加功能的时候,不会去看扩展性或者兼容性,直接语句一贴就完事。对于这种程序员,我真的希望你可以好好的静下心来想想,这些年来你代码能力有没有实质上的长进。

拥有“代码洁癖”其实是一种很难能可贵的事情,有时候看到一团糟糕代码,心里会去想对他进行重构。不要怀疑这样会不会耽误自己的效率,重构之后添加功能往往能够更加如鱼得水。

今天写的是序,为了便于有文有料,还是总结几个可以直接上手的要点给大家,之后我的出法应该就是针对重构列表中的每一条,都出一篇对应的文章。只有这样,我才能真正意义上的去重视那些简单的,和坦然接受那些复杂的重构手法。下面先列举几个比较有效的重构原则。作为序篇的总结。

1. 有时候遇到大长段函数,需要进行Extract Method的时候,往往找不到一个比较好的切入点。其实这里有一个小窍门,就是寻找逻辑泥团,那么什么是逻辑泥团?其实很简单,就是那种有switch,if...else,for,while等循环判断的逻辑结构。往往提炼这种到单独的函数可以更加有效。

2. 对于函数自身来说,函数内部的参数命名其实也很重要。有些同学可能会觉得接口的命名似乎比内部实现的参数命名更加重要,但你要知道,这个函数很可能之后还是由你去修改去增加功能。如果没有一个好的参数命名习惯,你又要重新开始去思考,这个变量是用来干什么的,这个时间就浪费掉了。

3.  如果函数中使用的参数都不是该类所持有,应该考虑是否要Move Method到别的类去。对于类中函数,如果有函数内部使用的变量跟本类没有任何关系,那么说白了,这个函数不属于这个类。那么就将这个函数移到他需要的参数所在的类中去。别以为这个小动作没什么改变,这其实已经改变了类与类之间的耦合关系。从之前的实现耦合到现在的接口耦合,耦合度直接下降了一个级别,这是有目共睹的。

4. 对于一些临时变量,如果可以通过函数获得,那么你就Replace Temp with Query,用函数将他替换,不要担心性能效率问题,记住28原则,80%的效率问题仅仅掌握在20%的代码身上。

5. 针对变化,转移函数。如果一个函数中需要同时用到两个类以上的变量,那么你需要去观察,这个函数中这些类中变量,在将来比较容易变化的是哪些。优先将这个函数放到变化类中去。这样对于类型码这种,你当然可以利用面向对象的法宝--多态来取代switch语句了。这里还有个小技巧,如果你觉得如果在类的生命周期中可能会改变类型,那你就别对这个类做继承,你所要做的就是加个间接层,State/Strategy模式。通过委托来进行生命期的行为改变,还记得David Wheeler的名言吗?----计算机科学中的大多数问题都可以通过增加一层间接性来解决。

结语: 其实个人很喜欢测评界的ZEALER,因为他们的精神就是想到什么就去做,与其思来想去要不要真正来篇读书笔记,不如狠下心来直接来一篇 『重构--改善既有代码的设计』读书笔记----序 : )

转载于:https://www.cnblogs.com/rickyk/p/4105158.html

『重构--改善既有代码的设计』读书笔记----序相关推荐

  1. 『重构--改善既有代码的设计』读书笔记----Move Method

    明确函数所在类的位置是很重要的.这样可以避免你的类与别的类有太多耦合.也会让你的类的内聚性变得更加牢固,让你的整个系统变得更加整洁.简单来说,如果在你的程序中,某个类的函数在使用的过程中,更多的是在和 ...

  2. 『重构--改善既有代码的设计』读书笔记----Remove Middle Man

    如果你发现某个类做了过多的简单委托动作,你就可以考虑是否可以让客户直接去调用受托类.在Hide Delegate中,我们介绍了封装受托对象的好处,但好处归好处也存在代价,就是当你每次需要在受托对象中增 ...

  3. 『重构--改善既有代码的设计』读书笔记----Split Temporary Variable

    继续开始我们重构手法的系列,今天介绍的是Split Temporary Variable---分解临时变量. 在我们平常写的程序中肯定有某些临时变量被赋予了超过一个的责任.如果他们不是那种收集结果(t ...

  4. 『重构--改善既有代码的设计』读书笔记----Replace Temp with Query

    Replace Temp with Query,顾名思义,表示你用查询来替换临时变量本身,临时变量对于函数来说是只有当前函数可见的,如果你在同类的别的地方要用到这个变量你就必须重新写表达式来获取这个变 ...

  5. 《重构-改善既有代码的设计》读书笔记心得体会

    定义:(名词)对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本 (动词)使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构 重构的目的是使软件 ...

  6. 【书中自有黄金屋】《重构-改善既有代码的设计》读书笔记

    前言 为何阅读这本书 阅读这本书的初心在于,半年多的时间里一直在重构项目代码. 阅读了不少人移交过来的代码,项目代码整体看下来,就会发现代码的阅读起来非常费劲,并且复用性和拓展性都很差,另外代码逻辑上 ...

  7. 《重构-改善既有代码的设计》读书笔记(二)

    12.Lazy Class – 冗赘类 对于几乎没有用的类,运用inline class 将其功能移动.去除这些不值得维护的类. 13.Speculative Generality – 夸夸其谈未来性 ...

  8. 《重构——改善既有代码的设计》读书笔记(三)

    一.构筑测试体系 在一个程序员的日常工作中,大概只有两件事:思考如何写新的代码,改旧代码中的bug.其中在做改bug时,我相信大多数人和我一样,时间更多的是花在找到这个bug上,其实该bug大多时候都 ...

  9. 【《重构 改善既有代码的设计》学习笔记2】重构原则

    [<重构 改善既有代码的设计>学习笔记2]重构原则 本篇文章的内容来自<重构 改善既有代码的设计>一书学习笔记整理并且加上自己的浅显的思考总结! 上一篇通过一个简单的例子体验了 ...

最新文章

  1. 周报速递丨百度与美团等互联互通;京东Shopify达成合作
  2. 同一条sql insert 有时快有时慢 引发的血案
  3. phpstudy-5.6.27-nts  安装redis扩展
  4. Java认证值得吗?
  5. 【数据结构基础】-线性表的顺序实现(数组实现)基本操作
  6. 我眼中的服务提供和服务消费
  7. dj鲜生-02-抽象基类的创建
  8. 前端开发人员需知——浏览器详解
  9. python中去掉外部引号的函数是_在Python中删除String中的引号
  10. python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...
  11. 在Microsoft-IIS/10.0上面部署mvc站点的时候,出现404的错误
  12. 介电常数和电容的关系_第二章:关于电力基础物理知识之认识电容器01
  13. 电信物联网开放平台_NB-IoT业务对接 Java 后台、Android 前端已完成预研
  14. cad怎样编辑标注文字?分享一个方法
  15. 姿态估计论文思路整理 -- Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
  16. Dockers镜像分层
  17. 面向初学者的 MQL4 语言系列之3——技术指标和内置函数
  18. 编码标准:纪律和人因工程的双剑合璧
  19. React面试题最全
  20. 数据库RocksDB优化方案

热门文章

  1. 【备忘】XP欢迎页中隐藏用户名
  2. XML数据岛(XML Data Island)(只适用于ie)
  3. 看完这篇文章保你面试稳操胜券——React篇
  4. PHP 实现中文截取无乱码的方法
  5. .NET Core 3.0中的数据库驱动框架System.Data
  6. c++ 11 override final
  7. 为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件
  8. JavaScript中OOP——面向对象中的继承/闭包
  9. Docker image Introduce
  10. java文件处理之压缩,分割