重构
Huaerge
这个作者很懒,什么都没留下…
展开
-
重构第二章 重构原则
1.什么是重构重构(名词):对软件内部结构的一种调整,目的是在不改变【软件之可察行为】前提下,提高其可理解性,降低其修改成本。重构(动词):使用一系列重构准则(手法),在不改变【软件之可察行为】前提下,调整其结构。两顶帽子:添加新功能和重构2.为何重构改进软件设计 有目的性地整理修改代码结构 消除重复代码(Duplicate Code)使软件更易被理解 助你找到臭虫 助你提高编程速度3.何时重构1)三次法则 第一次做某件事时只管去做,第二次做类似的事会产生反感,但无论如何还是做了;第三次再做类似的事,你原创 2010-10-24 20:19:00 · 674 阅读 · 0 评论 -
第十一章 处理概括关系
第十一章 处理概括关系 Dealing with Generalization11.1 Pull Up Field(值域上移)症状:两个subclasses拥有相同的值域解决办法:将此一值移至superclass.11.2 Pull Up Method(函数上移)症状:有些函数,在各个subclass中产生完全相同的结果。解决办法:将该函数移至superclass.11.3 Pull Up Constructor Body(构造函数体上移)症状:你在各个子类中拥有一些构造函数,它们的本体(代码)几乎完原创 2010-11-16 19:53:00 · 744 阅读 · 0 评论 -
第十章 简化函数调用
<br /> <br />第十章 简化函数调用 Making Method Calls Simpler<br /> <br />10.1 Rename Method(重命名函数)<br />症状:函数的名称未能揭示函数的用途。<br />解决办法:修改函数名称<br /> <br /> <br />10.2 Add Parameter(添加参数)<br />症状:某个函数需要从调用端得到更多信息<br />解决办法:为此函数添加一个对象参数,让该对象带进函数所需信息<br /> <br /> <br原创 2010-11-16 19:50:00 · 578 阅读 · 0 评论 -
第九章 简化条件表达式
<br /><br />第九章 简化条件表达式 Simplifying Conditional Expressions<br /> <br />9.1 Decompose Conditional(分解条件式)<br />症状:你有一个复杂的条件(if-then-else)语句<br />解决办法:从if-then-else三个段落中分别提炼出独立函数。<br /> <br />9.2 Consolidate Conditional Expression(合并条件式)<br />症状:你有一系列条件测原创 2010-11-16 19:46:00 · 730 阅读 · 0 评论 -
第八章 重新组织数据(Organizing Data)
第八章 重新组织数据(Organizing Data)8.1 Self Encapsulate Field(自封装值域) 就是set get函数症状:你直接访问一个值域(field),但与值域直接按的耦合关系逐渐变得笨拙。解决办法:为这个值域建立取值/设值函数(getting/setting methods),并且只以这些函数来访问值域。8.2 Replace Data Value with Object(以对象取代数据值)症状:你有一笔数据项(data item),需要额外的数据和行为。解决办法原创 2010-11-16 19:41:00 · 1022 阅读 · 0 评论 -
第七章 在对象之间搬移特性
第七章 在对象之间搬移特性(Moving Features Between Objects)7.1 Move Method(搬移函数)症状:你的程序中,有个函数与其所驻class之外的另一个class进行更多交流;调用后者或被后者调用。解决办法:在该函数最常引用的class中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或者是将旧函数完全移除。7.2 Move Field(搬移值域)症状:你的程序中,某个field(值域)被其所驻class之外的另一个class更多地用到。解决办法:在t原创 2010-11-16 19:37:00 · 646 阅读 · 0 评论 -
第五章 重构名录
<br /><br />重构名录<br />一、重构的记录格式<br />5-12章介绍了各种重构手法,每个重构手法包含如下5部分:<br />1.名称:<br />2.简短概要:简单介绍此重构手法的适用情景<br />3.动机:介绍为什么需要这个重构和什么情况下不该使用这个重构<br />4.作法:简明扼要地一步一步介绍如何进行此重构<br />5.范例:<br /> <br />二、寻找引用点<br /> 文本工具进行查找<br />三、这些重构准则有多成熟<br /> 重构的基本技巧-小步前原创 2010-11-01 15:06:00 · 653 阅读 · 0 评论 -
第四章 构筑测试体系
自我测试代码(Self-testing Code)的价值 如果认真观察程序员把最多时间耗在哪里,你就会发现,编写代码其实只占非常小的一部分。 确保所有测试都完全自动化,让它们检查自己的测试结构。 只要写好一点功能就添加测试。 一整组(a suite of)测试就是一个强大的臭虫侦测器,能够大大所见查找臭虫所需要的时间。 实际上,撰写测试代码的最有用时机是在开始编程之前。当你需要添加特性的时候,先写相应测试代码。编写测试代码就是在问自己,添加这个功能需要做些什么。编写测试代码还能使你把注意力集原创 2010-11-01 15:04:00 · 562 阅读 · 0 评论 -
第三章 代码的坏味道(一)
3.1 Duplicated Code (重复的代码) 问题一:同一个class内的两个函数含有相同的表达式(expression). 解决办法:采用Extract Method(110)提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。 问题二:两个互为兄弟(sibling)的subclasses内含相同表达式 解决办法:对两个classes都使用Extract Method(110),然后再对被提炼出来的代码使用Pull Up Method(332),将它推入s原创 2010-10-25 22:32:00 · 619 阅读 · 0 评论 -
第三章 代码的坏味道(二)
<br />3.9 Primitive Obsession(基本型别偏执)<br /> 不要固执地硬是要使用基本数据类型,要习惯于使用对象,即使对象里的东西很少。<br />3.10 Switch Statements(switch 惊悚现身)<br /> 问题: 大多数时候,一看到switch语句及应该考虑[多态]来替换它。<br /> 解决: 首先使用Extract Method(110)将switch语句提炼到一个独立函数中,再使用Move Method(142)将它搬移到需要多态性的那原创 2010-10-28 13:09:00 · 558 阅读 · 0 评论 -
重构第一章 重构的第一个案例
这一章通过讲解租碟的案例来初步解释了重构的意义,有些问题何老师已经讲过了,比如说变量命名,分割代码等等1.1 起点 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地那么做,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。1.2 重构的第一步(测试) 每当我要进行重构的时候,第一个步骤永远相同:我得为即将修改的代码简历一组可靠的测试环境。 重构之前,首先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验(self-checking)的能力。 什么是自我检验(self原创 2010-10-24 20:18:00 · 731 阅读 · 0 评论 -
第六章 重新组织你的函数
6.1 Extract Method(提炼函数)动机:当看见一个过长的函数或者一段需要注释才能让人理解用途的代码,就需要将这段代码放进一个独立函数中一段代码可以被组织在一起并独立出来。 三种情况:(局部变量替换为查询式即可)1)无局部变量2)有局部变量3)对局部变量再赋值6.2 Inline Method(将函数内联化) 一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂。在函数调用点插入函数本体,然后移除该函数。三种主要情况:1)内部代码吧和函数名称同原创 2010-11-16 19:33:00 · 780 阅读 · 0 评论