什么时候该重构--《重构》阅读笔记

当出现以下问题的时候,就要开始重构代码。

1)重复代码

重复代码在业务逻辑相同的地方,抽成方法。重复代码在业务逻辑不同的地方。抽成类。

2)long method

其实这个问题很多时候都碰到。我觉得原因主要还是两个。一个是修bug的时候,不敢改。因为这玩意,要改的话,压力还是很大的。还有一个写好之后,懒的改。这一种,特别实在这一次看书的过程中,觉得重构完全可以发生在刚写好代码的时候。因为我们写代码的时候,本能就是先实现功能。然后再考虑代码改如何组织。

3)large class

同上。

4)long parameter list

我现在遇到这种情况,比较喜欢把paramter抽象成一个类。

5)Divergent change(发散式变化)

某个class经常因为不同的原因在不同的方向上变化。

出现这个问题,觉得还是要从设计上考虑。不要操之过急。

6)shotgun Surgery(散弹式修改)

一个改变,多出修改。

根据经验,这种问题,第一个是懒,懒的抽到一个地方,然后一个一个地方改。第二个原因吗,是一些硬件或者知识储备不行。举个列子来说,给一个entry加一个新的属性。往往是从DAO层,要修改到UI层。这个有时候很难做到。

7)Feature Envy(依赖情节)

这里我觉得不绝对。比方说一些类,方法,起主要责任就是调度。这样势必会有很多依赖。

或者从另一个角度来说,如果一个类,或者方法,主要作用还是实现一个功能,那么一定要遵守这个规则。否者,还是看具体情况。

8)Data clumps(数据泥团)

我觉得这个还是看吧。还真不好说。

9)Primitive Obsession(基本类型偏执)

很有道理,但是会造成类的膨胀。不过这个还是主要依赖于设计。

10)switch statement

11)Parallel Inheritance Hierarchies(平行继承体系)

这个觉得不是很绝对。

12)Lazy class(冗余类)

13)Speculative Generality(夸夸其谈未来性)

其实这就是过度设计。我觉得实际中,要和懂业务了解业务的人多沟通,来规避这个问题。因为太防止“过度设计”,以后的修改也会变得很苦难。

14)Temporary Field(令人迷惑的暂时值域)

introduce Null object:感觉还不如抛exception

这个还真不太理解。

15)Message chains(过度耦合的消息链)

这种依赖,感觉上还是建立在对业务的认识上的。

16)Middle man

其实这一点,我还是不太认同。怎么说呢,有些时候中间人或者说中间人类的作用,就是降低耦合。

17)Inappropriate intimacy

这一些怎么说呢,完全是看个人的勤劳与否的程度的。

18)Alternative Classes with different Interfaces

19) incomplete library class

20)data classes

其实我这个不太同意。

21) Refuse Bequest

觉得这个应该从设计的高度来解决

22)Comments

个人理解了。

什么时候该重构--《重构》阅读笔记,布布扣,bubuko.com

时间: 2024-08-07 17:42:31

什么时候该重构--《重构》阅读笔记的相关文章

重新组织函数--《重构》阅读笔记

1)寻找引用点时,最好使用工具,然后再人工review.在看到这个问题的时候,我估计应该是很久之前了.现在用IDE.这个要方便很多. 2)重新组织函数的方法和目标. 其实目标很简单.就是消灭长函数. 常用方法 Extract method Inline Method Replace Temp with Query Temporary Variable Replace Method with Method Object Remove Assignments to Parameters Substi

重构——Martin Fowler 阅读笔记

重构的第一步: 为即将修改的代码建立一组可靠的测试环境. 和任何重构手法一样,当提炼一个函数时,我们必须知道可能出什么错. 安全步骤: 首先在一个函数内找到局部变量和参数.任何不会被修改的变量都可以被当成参数传入新的函数,至于会被修改的变量就需要格外小心. 重构代码原则:每次的改动幅度不要太大,这样才能保证 重构——Martin Fowler 阅读笔记

《构建之法》阅读笔记(1)

<构建之法>第一章阅读笔记 大马哈鱼洄游模型 软件工程按照经典的瀑布模型 1. 需求分析 2. 设计阶段 3. 实现阶段 4. 稳定阶段 5. 发布阶段 6. 维护阶段 事实上在现实世界中,软件工程师的职业发展与瀑布流程刚好相反 毕业进入公司(或者实习生),开始学习并维护一些已有的软件(维护阶段),主要由自己的师傅(Mentor)带领 能够在项目中改一些 Bug,然后发现发布小规模的更新版本(稳定/发布阶段),联系重构,开始和其他同事打交道 有机会负责重写一个较小的模块,没有多少文档,自己要写

构建之法阅读笔记08-第十一章

阅读笔记 第十一章:软件设计与实现 在第十一章的软件设计与实现方面,介绍了一些关于典型的开发流程和开发阶段的一些管理方法. 在拿到设计文档之后,还需要做一些其他事情,比如估计任务所需要的时间,写一些原型代码,看看效果:做代码的自我复审,进行重构:写单元测试等等.最后还要把修改集集成到代码库中. 开发人员有一个标准的工作流程:进行功能需求分析,复审设计文档,详细设计,实现设计来编写代码,同伴复审,源代码的合并.构建等等,其中的每一步都有可能出现bug,要随时发现并且修改bug,最后是测试完成,发布

QCon 2015 阅读笔记 - 移动开发最佳实践

所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构,基础是各种Infrastructure Frameworks, 基于上面是UI的控件库,运行时的库(猜测用于动态配置).最上层是业务层面,各个App层可以相对独立形成业务模块化.同时也是Hybrid的架构,有Web Container来实现WebApp的模块. 网络服务 Native TCP连接 +

《构建之法阅读笔记02》

这次主要对<构建之法>的第四章“两人合作”作一次阅读笔记. 首先是代码规范问题. 我过去对于代码规范问题并没有做到注意.在编程中,许多变量和函数的命名都非常的简单而没有实际的意义.而且编程时不注意对齐缩进.很多时候也不加注释,导致对这些简单的变量名称不熟悉. 这样做会使得很多人读代码费劲,甚至是自己都要花时间再次阅读懂自己的代码.而且很多没必要的注释也会使得注释失去意义.当自己再次在原基础上编程时,可能要重新编程等问题. 因此,通过阅读“代码规范”,我找到一些解决方法.代码的风格要简明.易读.

《代码阅读方法与实践》阅读笔记之二

时间过得真快,一转眼,10天就过去了,感觉上次写阅读笔记的场景仿佛还历历在目.<代码阅读方法与实践>这本书真的很难写笔记,本来我看这本书的名字还以为书里大概写的都是些代码阅读的简易方法,心想着这就好写笔记了,没想到竟然好多都是我们之前学过的东西,这倒让我有点无从下手了.大概像我们这些还没有太多经历的大学生,总是习惯于尽量避免自己的工作量,总是试图找到一些完成事情的捷径吧.总之,尽管我不想承认,但我自己心里很清楚,我就是这种人.下面开始言归正传,说说接下来的几章内容归纳. 这本书在前面已经分析了

《大道至简》阅读笔记1

<大道至简>阅读笔记1 不知不觉间看完了第一章,从这个章节里我看到了一些我们都明白可是却自己很难做到的道理. 书中从愚公移山的故事和编程相结合给出了编程的精义就是顺序.分支.循环,这些都是我们所熟悉的,也是老师在教学中耳提面命的,可是我们又有几个人能做到呢. 我们总是在找着各种各样的学不好学不会理由,“它太难了”,“我太笨了”,认真的想一想难道真的是它太难了或者是自己太笨了么?不,答案是否定的,追根究底是懒惰,是没能坚持.从根本上来说,不存在会不会写程序的问题,除了先天智障和后天懒惰者,这要你

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index