标题：重构改善既有代码的设计(英文注释版)
编辑推荐
软件开发的不朽经典，生动阐述重构原理和具体做法，新添大量重构方法，使你与时供进，丰富的词汇和背景注释，助你轻松读经典。
重构，一言以蔽之，就是在不改变外都行为的前提下，有条不紊地改善代码。多年来，正是本书原版的出版，使重构终于从编程高手们的小圈子走出，成为众多普通程序员日常开发工作中不可或缺的一部分。而本书也因此成为与《设计模式》齐名的经典著作，被译为中、德、俄、日等众多语言，在世界范围内畅销不衰。
今天，无论是重构本身，业界对重构的理解，还是开发工具对重构的支持力度，都与本书最初出版时不可同日而语。英文注释版根据原作者MartinFowler维护的本书网站，对原书进行了扩充，加入了大量新增重构，使这部不朽经典历久弥新。
作者简介
MartinFowler世界软件开发大师，在面向对象分析设计、UML、模式、XP和重构等领域都有卓越贡献，现为著名软件开发咨询公司ThoughtWorks的首席科学家。他的多部著作《分析模式》、《UML精粹》和《企业应用架构模式》等都已经成为脍炙人口的经典。
目录
Chapter1：Refactoring，aFirstExample重构，第一个例子　
TheStartingPoint起点　
TheFirstStepinRefactoring重构第一步　
DecomposingandRedistributingtheStatementMethod分解并重组slalemenl方法　
ReplacingtheConditionalLogiconPriceCodewithPolymorphism用多态代替价格条件逻辑代码　
FinalThoughts结语　
Chapter2：PrinciplesinRefactoring重构原则　
DefiningRefactoring何谓重构　
WhyShouldYouRefactor?为何重构　
WhenShouldYouRefactor?何时重构　
WhatDoITellMyManager?怎样说服经理　
ProblemswithRefactoring重构的问题　
RefactoringandDesign重构与设计　
RefactoringandPerformance重构与性能　
WhereDidRefactoringComeFrom?重构的起源　
Chapter3：BadSmellsinCode(byKentBeckandMartinFowler)代码坏昧　
DuplicatedCode重复代码　
LongMethod过长方法　
LargeClass过长类　
LongParameterList过长参数列表　
DivergentChange发散式变化　
ShotgunSurgery霰弹式修改　
FeatureEnvy特性依恋　
DataClumps数据泥团　
PrimitiveObsession基本类型偏执　
SwitchStatementsswitch语句　
ParallelInheritanceHierarchies平行继承体系　
LazyClass冗余类　
SpeculativeGenerality理论上的一般性　
TemporaryField临时字段　
MessageChains消息链　
MiddleMan中间人　
InappropriateIntimacy过度亲密　
AlternativeClasseswithDifferentInterfaces接口不同的等效类
IncompleteLibraryClass不完整的库类　
DataClass数据类　
RefusedBequest拒绝继承　
Comments注释过多　
Chapter4：BuildingTests构建测试　
TheValueofSelf-testingCode自测试代码的重要性　
TheJUnitTestingFrameworkJunit测试框架　
AddingMoreTests添加更多测试　
Chapter5：TowardaCatalogofRefactorings重构目录　
FormatoftheRefactorings重构描述的格式　
FindingReferences寻找引用　
HowMatureAreTheseRefactorings?这些重构的成熟度如何
Chapter6：ComposingMethods组合方法　
ExtractMethod提取方法　
InlineMethod内联方法　
InlineTemp内联临时变量　
*ReplaceTempwithQuery用查询方法代替临时变量　
IntroduceExplainingVariable引入解释性变量　
SplitTemporaryVariable分离临时变量　
*RemoveAssignmentstoParameters去除参数赋值　
ReplaceMethodwithMethodObject用方法对象代替方法　
SubstituteAlgorithm替换算法　
Chapter7：MovingFeaturesBetweenObjects在对象之间移动特性
*MoveMethod移动方法　
MoveField移动字段　
ExtractClass提取类　
InlineClass内联类　
HideDelegate隐藏委托类　
RemoveMiddleMan去除中间人　
IntroduceForeignMethod引入外加方法　
*IntroduceLocalExtension引入本地扩展类　
Chapter8：OrganizingData组织数据　
SelfEncapsulateField自封装字段　
ReplaceDataValuewithObject用对象代替数据值　
ChangeValuetoReference将值对象改为引用对象　
ChangeReferencetoValue将引用对象改为值对象　
ReplaceArraywithObject用对象代替数组　
DuplicateObservedData重复被观察数据　
*ChangeUnidirectionalAssociationtoBidirectional将单向关联改为双向　
ChangeBidirectionalAssociationtoUnidirectional将双向关联改为单向　
*ReplaceMagicNumberwithSymbolicConstant用字面常量代替魔数　
EncapsulateField封装字段　
EncapsulateCollection封装集合　
ReplaceRecordwithDataClass用数据类代替记录　
*ReplaceTypeCodewithClass用类代替类型码　
ReplaceTypeCodewithSubclasses用子类代替类型码　
ReplaceTypeCodewithState/Strategy用State/Strategy代替类型码　
ReplaceSubclasswithFields用字段代替子类　
Chapter9：SimplifyingConditionalExpressions简化条件语句　
DecomposeConditional分解条件语句　
ConsolidateConditionalExpression合并条件语句　
ConsolidateDuplicateConditionalFragments合并重复的条件片段　
RemoveControlFlag去除控制标志　
ReplaceNestedConditionalwithGuardClauses用守卫语句代替嵌套条件语句　
ReplaceConditionalwithPolymorphism用多态代替条件语句　　IntroduceNullObject引入Null对象　
IntroduceAssertion引入断言　
Chapter10：MakingMethodCallsSimpler简化方法调用　
RenameMethod重命名方法　
AddParameter添加参数　
RemoveParameter去除参数　
SeparatequeryfromModifier将查询方法与修改方法分离
ParameterizeMethod参数化方法
ReplaceParameterwithExplicitMethods用显式方法代替参数
PreserveWholeObject保持对象完整
ReplaceParameterwithMethod用方法代替参数　
IntroduceParameterObject引入参数对象
RemoveSettingMethod去除设置方法　
HideMethod隐藏方法　
ReplaceConstructorwithFactoryMethod用工厂方法代替构造器
EncapsulateDowncast封装向下转型　
ReplaceErrorCodewithException用异常代替错误码　
ReplaceExceptionwithTest用测试代替异常
Chapter11：DealingwithGeneralization处理泛化关系　
PullUpField上移字段　
PullUPMethod上移方法　
PullUpConstructorBody上移构造器主体　
PushDownMethod下移方法
PushDownField下移字段　
ExtractSubclass提取子类　
ExtractSuperclass提取超类
ExtractInterface提取接口
CollapseHierarchy合并继承层次　
FormTemplateMethod形成TemplateMethod　
ReplaceInheritancewithDelegation用委托代替继承　
ReplaceDelegationwithInheritance用继承代替委托5
Chapter12：BigRefactorings(byKentBeckandMartinFowler)大型重构　
TeaseApartInheritance分解继承层次　
ConvertProceduralDesigntoObjects将过程式设计转换为面向对象　
SeparateDomainfromPresentation将领域逻辑与表现分离
ExtractHierarchy提取继承层次
Chapter13：Refactoring，Reuse，andReality(byWilliamOpdyke)重构，复用与现实
ARealityCheck现实的检验
WhvAreDevelopersReluctanttoRefactorTheirPrograms？开发人员为何不愿重构程序
ARealityCheck(Revisited)再谈现实的检验
ResourcesandReferencesforRefactoring重构的资源和参考文献　
ImplicationsRegardingSoftwareReuseandTechnologyTransfer对软件复用与技术传播的意义　
AFinalNote结语　
References参考文献　
Chapter14：RefactoringTools(byDonRobertsandJohnBrant)重构工具　
RefactoringwithaTool使用工具重构
TechnicalCriteriaforaRefactoringTool重构工具的技术标准　
PracticalCriteriaforaRefactoringTool重构工具的实用标准
WrapUp结语　
Chapter15：PuttingItAllTogether(byKentBeck)集大成　
References参考文献　
ListofSoundbites要点列表
Updates更新内容　
Index索引