首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

《复建》:代码中的坏味道

2013-07-04 
《重构》:代码中的坏味道读完《重构》,这虽然是一本详细讲解重构手法的书,但为了彰显其价值,作者前后也不遗余

《重构》:代码中的坏味道
读完《重构》,这虽然是一本详细讲解重构手法的书,但为了彰显其价值,作者前后也不遗余力得讲了很多关于为什么重构、何时重构的话题,其中有一章叫“代码的坏味道”,就是指那些现有程序中可行但不那么让人舒服的代码问题,作者建议以此作为代码有必要重构的信号。

我觉得说的确实很现实,所以摘录概要如下,也给自己长长记性。

1、重复代码(Duplicated Code),就是干着同一件事儿的相同程序结构出现了多次,可能是一个类的不同函数里,可能是互为兄弟的子类,甚至可能是互不相关的类中。

2、过长函数(Long Method),这有点算是过程化编程方式形成问题,函数的短小精悍所带来的解释能力、共享能力、选择能力,是长函数无可比拟的,书中还提出函数分解可能同样会带来阅读困难,因为可能需要为此不断转换上下文,但也指出其真正问题不是函数分解,真正的关键在于为函数取一个好名字,为此如果必要,甚至应该不惜起一个比自身程序还要长的名字。

3、过大的类(Large Class),对此,书中首先提到的就是这样的类中往往会出现太多实例变量,接着就难免重复代码的问题,至于实际情况,我相信每个程序员都还有自己的认识,反正过大的类确实会让人觉得不合适。

4、过长参数列(Long Parameter List) ,太长的参数列会难以理解、前后不一致、不易使用。要么是函数本身设计有问题,要么应该提炼参数为对象。

5、发散式变化(Divergent Change),“一个类受多种变化影响”,一个极端说法可能更容易理解,无论你要对系统做哪个方向的修改,都要去改这个类。

6、散弹式变化(Shotgun Surgery),“一个种变化引发多个类需要修改”,比如一个业务逻辑比较复杂,实现代码被分散在多个地方,一旦这个业务逻辑发生变动,就引发出很多不同地方的小修改。其实这个问题和上个问题,是一对需要互相权衡的情况。

7、依恋情结(Feature Envy),函数对于某个类的兴趣远远高于自己所在类的兴趣,调用了太多另一个类的取值函数,所以这个函数看上去是放错了位置。作者阐述这个问题中还指出对象技术的要点在于:这是一种“将数据和对数据的操作行为包装在一起的”的技术。

8、数据泥团(Data Clumps),一些数据项虽然看上去彼此独立,却总是需要同时出现,那么就值得考虑它们是不是拥有属于它们自己的对象。其实这是个数据完整性问题。

9、基本类型偏执(Primitive Obsession),是指可以提炼出对象的数据信息,因为简单仍然坚持用一些简单的基本数据类型来表示。这个问题,我想到了大学中由C转向java的学习时,还常用整数0和1做逻辑真假判断。

10、Switch 表达式(Switch Statements),作者是指这些都应该尽量用多态来取代。
11、平衡继承体系(Parallel Inheritance Hierarchies),原文说两个继承体系的名称前缀完全相同,我觉得就是两个继承体系有着相同的概念,每当为某个类增加一个子类时,必须也为另一个类增加子类,这种情况就是平衡继承体系问题。我还没遇到过,有点不理解怎么会有这种情况的出现。

12、冗赘类(Lazy Class),或者是后期随着维护变化,一个不再需要的类,或者是应对设计时考虑到的某种潜在变化而创建的类,但变化实际始终没有发生,反正就是不再用的着的类。

待续~

热点排行