下载 >  课程资源 >  专业指导 > 重构--修改既有代码的设计

重构--修改既有代码的设计

 Martin Fowler和本书另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。本书解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。本书的核心是一份完整的重构名录(catalog of refactoring),其中每一项都介绍一种经过实证的代码变换手法(code transformation)的动机和技术。某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快你就会把这些重构准则和其名称加入自己的开发词典中,并且朗朗上口。点击进入该书更多详细信息。
2009-06-14 上传大小:2.05MB
想读
分享
收藏 举报
重构 改善既有代码设计 中文高清完整版pdf

《重构 改善既有代码的设计》清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了70 多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。《重构 改善既有代码的设计》提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。 购买地址:https://item.jd.com/11728740.html

立即下载
重构-改善既有代码设计(简体中文最新版)

一个软件总是为解决某种特定的需求而产生,时代在发展,客户的业务也在发生变化。有的需求相对稳定一些,有的需求变化的比较剧烈,还有的需求已经消失了,或者转化成了别的需求。在这种情况下,软件必须相应的改变。 考虑到成本和时间等因素,当然不是所有的需求变化都要在软件系统中实现。但是总的说来,软件要适应需求的变化,以保持自己的生命力。

立即下载
重构:改善既有代码设计(mobi,pdf)高清

重构:改善既有代码的设计,压缩包里面有mobi和pdf两种版本

立即下载
重构改善既有代码设计 高清pdf

编辑推荐 软件开发的不朽经典 生动阐述重构原理和具体做法  普通程序员进阶到编程高手必须修炼的秘笈 重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是本书原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。本书也因此成为与《设计模式》齐名的经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。 本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。 媒体推荐 “这本书之于重构就相当于韵谱之于作诗。一个翻着韵书作诗的诗人一定是蹩脚的,但好的诗人却要对那109个韵部了然于胸;同样,一个好的程序员要求能够主动自然地重构代码,虽不应翻着重构手册干活,但需对本书中提到的70多个重构方法成竹在胸。然而,在达到这一境界之前,需要不断的时间和经验积累,并且要先读读Fowler的这本书。” “一口气读完了这本书,感觉书中作者对代码的整理不像是一种技术,更像是一种艺术。” “太经典了,看这本书真有醍醐灌顶的感觉。” “处于金字塔顶部的书不多,而这一本书恰恰就是,很幸运我看到了它。” “这本书本质上是向我们推荐了一种优秀的编程习惯和编程态度。在领会本书思想的同时,我们也应该培养一种精益求精的工作态度,探索一条更适合自己的重构道路。” “今年已经看了两遍,每次都有很大的收获。特别喜欢其中对其他章节的索引,当你把它作为一个手边随时翻阅的参考书看时,它不知不觉引导你读了很多内容,问题也在不知不觉中有了求解思路,最终得以解决。” “不要写完代码就束之高阁,适当地优化代码结构,能够为以后的开发带来许多方便,这本书就向你介绍了这方面的技巧,说得非常详细。” “程序几乎离不开重构。但如何更加迅速有效地重构却一直没有系统性的指导。本书就是这样的经典巨著,有了它,重构不再烦琐!” 作者简介 作者:[美]马丁·福勒(Martin Fowler) 译者:熊节 作者介绍 Martin Fowler,世界软件开发大师,在面向对象分析设计、UML、模式、XP和重构等领域都有卓越贡献,现为著名软件开发咨询公司ThoughtWorks的首席科学家。他的多部著作《分析模式》、《UML精粹》和《企业应用架构模式》等都已经成为脍炙人口的经典。 译者介绍 熊节,ThoughtWorks中国公司的高级咨询师、架构师和项目经理,在大型企业应用及互联网应用的架构和管理方面拥有丰富经验。作为敏捷方法学顾问和重构专家,他拥有在各种技术平台、编程语言、软件形态的项目中实施重构的丰富经验,并曾主持极具挑战性的超大规模电信软件系列重构工作。 目录 第1章 重构,第一个案例1 1.1 起点1 1.2 重构的第一步7 1.3 分解并重组statement( )8 1.4 运用多态取代与价格相关的条件逻辑34 1.5 结语52 第2章 重构原则53 2.1 何谓重构53 2.2 为何重构55 2.3 何时重构57 2.4 怎么对经理说60 2.5 重构的难题62 2.6 重构与设计66 2.7 重构与性能69 2.8 重构起源何处71 第3章 代码的坏味道75 3.1 Duplicated Code(重复代码)76 3.2 Long Method(过长函数)76 3.3 Large Class(过大的类)78 3.4 Long Parameter List(过长参数列)78 3.5 Divergent Change(发散式变化)79 3.6 Shotgun Surgery(霰弹式修改)80 3.7 Feature Envy(依恋情结)80 3.8 Data Clumps(数据泥团)81 3.9 Primitive Obsession(基本类型偏执)81 3.10 Switch Statements(switch惊悚现身)82 3.11 Parallel InheritanceHierarchies(平行继承体系)83 3.12 Lazy Class(冗赘类)83 3.13 Speculative Generality(夸夸其谈未来性)83 3.14 Temporary Field(令人迷惑的暂时字段)84 3.15 Message Chains(过度耦合的消息链)84 3.16 Middle Man(中间人)85 3.17 Inappropriate Intimacy(狎昵关系)85 3.18 Alternative Classes with Different Interfaces(异曲同工的类)85 3.19 Incomplete Library Class(不完美的库类)86 3.20 Data Class(纯稚的数据类)86 3.21 Refused Bequest(被拒绝的遗赠)87 3.22 Comments(过多的注释)87 第4章 构筑测试体系89 4.1 自测试代码的价值89 4.2 JUnit测试框架91 4.3 添加更多测试97 第5章 重构列表103 5.1 重构的记录格式103 5.2 寻找引用点105 5.3 这些重构手法有多成熟106 第6章 重新组织函数109 6.1 Extract Method(提炼函数)110 6.2 Inline Method(内联函数)117 6.3 Inline Temp(内联临时变量)119 6.4 Replace Temp with Query(以查询取代临时变量)120 6.5 Introduce Explaining Variable(引入解释性变量)124 6.6 Split Temporary Variable(分解临时变量)128 6.7 Remove Assignments to Parameters(移除对参数的赋值)131 6.8 Replace Method with Method Object(以函数对象取代函数)135 6.9 Substitute Algorithm(替换算法)139 第7章 在对象之间搬移特性141 7.1 Move Method(搬移函数)142 7.2 Move Field(搬移字段)146 7.3 Extract Class(提炼类)149 7.4 Inline Class(将类内联化)154 7.5 Hide Delegate(隐藏“委托关系”)157 7.6 Remove Middle Man(移除中间人)160 7.7 Introduce Foreign Method(引入外加函数)162 7.8 Introduce Local Extension(引入本地扩展)164 第8章 重新组织数据169 8.1 Self Encapsulate Field(自封装字段)171 8.2 Replace Data Value with Object(以对象取代数据值)175 8.3 Change Value to Reference(将值对象改为引用对象)179 8.4 Change Reference to Value(将引用对象改为值对象)183 8.5 Replace Arraywith Object(以对象取代数组)186 8.6 Duplicate Observed Data(复制“被监视数据”)189 8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)197 8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联)200 8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)204 8.10 Encapsulate Field(封装字段)206 8.11 Encapsulate Collection(封装集合)208 8.12 Replace Record with Data Class(以数据类取代记录)217 8.13 Replace Type Code with Class(以类取代类型码)218 8.14 Replace Type Code with Subclasses(以子类取代类型码)223 8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码)227 8.16 Replace Subclass with Fields(以字段取代子类)232 第9章 简化条件表达式237 9.1 Decompose Conditional(分解条件表达式)238 9.2 Consolidate Conditional Expression(合并条件表达式)240 9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段)243 9.4 Remove Control Flag(移除控制标记)245 9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)250 9.6 Replace Conditional with Polymorphism(以多态取代条件表达式)255 9.7 Introduce Null Object(引入Null对象)260 9.8 Introduce Assertion(引入断言)267 第10章 简化函数调用271 10.1 Rename Method(函数改名)273 10.2 Add Parameter(添加参数)275 10.3 Remove Parameter(移除参数)277 10.4 Separate Query from Modifier(将查询函数和修改函数分离)279 10.5 Parameterize Method(令函数携带参数)283 10.6 Replace Parameter with Explicit Methods(以明确函数取代参数)285 10.7 Preserve Whole Object(保持对象完整)288 10.8 Replace Parameter with Methods(以函数取代参数)292 10.9 Introduce Parameter Object(引入参数对象)295 10.10 Remove Setting Method(移除设值函数)300 10.11 Hide Method(隐藏函数)303 10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数)304 10.13 Encapsulate Downcast(封装向下转型)308 10.14 Replace Error Code with Exception(以异常取代错误码)310 10.15 Replace Exception with Test(以测试取代异常)315 第11章 处理概括关系319 11.1 Pull Up Field(字段上移)320 11.2 Pull Up Method(函数上移)322 11.3 Pull Up Constructor Body(构造函数本体上移)325 11.4 Push Down Method(函数下移)328 11.5 Push Down Field(字段下移)329 11.6 Extract Subclass(提炼子类)330 11.7 Extract Superclass(提炼超类)336 11.8 Extract Interface(提炼接口) 11.9 Conapse Hierarchy(折叠继承体系)344 11.10 Form Template Method(塑造模板函数)345 11.11 Replace Inheritance with Delegation(以委托取代继承)352 11.12 Replace Delegation with Inheritance(以继承取代委托)355 第12章 大型重构359 12.1 Tease Apart Inheritalice(梳理并分解继承体系)362 12.2 Convert Procedlural Design to Objects(将过程化设计转化为对象设计)368 12.3 Separate Domain from Presentation(将领域和表述/显示分离)370 12.4 Extract Hierarchv(提炼继承体系)375 第13章 重构,复用与现实379 13.1 现实的检验380 13.2 为什么开发者不愿意重构他们的程序381 13.3 再论现实的检验394 13.4 重构的资源和参考资料394 13.5 从重构联想到软件复用和技术传播395 13.6 小结397 13.7 参考文献397 第14章 重构工具401 14.1 使用工具进行重构401 14.2 重构工具的技术标准403 14.3 重构工具的实用标准405 14.4 小结407 第15章 总结409 参考书目413 要点列表417 索引419

立即下载
重构-改善既有代码设计[高清版] PDF

重构-改善既有代码的设计[高清版] PDF

立即下载
重构-改善既有代码设计》电子书高清版+源码

《重构-改善既有代码的设计》电子书高清版+源码

立即下载
重构-改善既有代码设计 高清pdf 带书签

重构-改善既有代码的设计 高清pdf 带书签

立即下载
重构-改善既有代码设计-高清完整版-带书签.pdf

《重构:改善既有代码的设计》清晰地揭示了重构的过程,解释了重构的原理和最佳实践方式, 并给出了何时以及何地应该开始挖掘代码以求改善。 书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。 《重构:改善既有代码的设计》提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。 《重构:改善既有代码的设计》适合软件开发人员、项目管理人员等阅读, 也可作为高等院校计算机及相关专业师生的参考读物。 本资源转载自网络,供学习研究之用,如用于商业用途,请购买正版,如有侵权,请联系我或CSDN删除。

立即下载
重构_改善既有代码设计[高清版].pdf

重构_改善既有代码的设计[高清版],喜欢的同学,欢迎下载,祝学习愉快。第一次听到“重构”这个词,它的思想足以令我感到震撼。

立即下载
重构--改善既有代码设计_中文版.mobi

重构--改善既有代码的设计_中文版

立即下载
重构_改善既有代码设计[高清版][中文版][带书签]

重构_改善既有代码的设计[高清版][中文版][带书签],Martin Fowler著,熊杰译。

立即下载
重构-改善既有代码设计(简体中文非扫描完整版).pdf

重构-改善既有代码的设计(简体中文),非扫描完整版,经典中的经典,重新制作精美封面电子书

立即下载
重构-改善既有代码设计》电子书高清版+源码

重构-改善既有代码的设计》电子书高清版+源码 重构-改善既有代码的设计》电子书高清版+源码 重构-改善既有代码的设计》电子书高清版+源码

立即下载
重构--改善既有代码设计 中文版 mobi格式

重构--改善既有代码的设计,中文版,mobi格式,适合kindle阅读

立即下载
重构-改善既有代码设计(高清)+Clean Code 代码整洁之道(中文带书签)

重构-改善既有代码的设计[高清版] && clean code-代码整洁之道(中文完整版-带书签) 重构-改善既有代码的设计目录 第1章 重构,第一个案例 1 1.1 起点 1 1.2 重构的第一步 7 1.3 分解并重组statement() 8 1.4 运用多态取代与价格相关的条件逻辑 34 1.5 结语 52 第2章 重构原则 53 2.1 何谓重构 53 2.2 为何重构 55 2.3 何时重构 57 2.4 怎么对经理说 60 2.5 重构的难题 62 2.6 重构与设计 66 2.7 重构与性能 69 2.8 重构起源何处 71 第3章 代码的坏味道 75 3.1 duplicated code(重复代码) 76 3.2 long method(过长函数) 76 3.3 large class(过大的类) 78 3.4 long parameter list(过长参数列) 78 .3.5 divergent change(发散式变化) 79 3.6 shotgun surgery(霰弹式修改) 80 3.7 feature envy(依恋情结) 80 3.8 data clumps(数据泥团) 81 3.9 primitive obsession(基本类型偏执) 81 3.10 switch statements(switch惊悚现身) 82 3.11 parallel inheritancehierarchies(平行继承体系) 83 3.12 lazy class(冗赘类) 83 3.13 speculative generality(夸夸其谈未来性) 83 3.14 temporary field(令人迷惑的暂时字段) 84 3.15 message chains(过度耦合的消息链) 84 3.16 middle man(中间人) 85 3.17 inappropriate intimacy(狎昵关系) 85 3.18 alternative classes with different interfaces(异曲同工的类) 85 3.19 incomplete library class(不完美的库类) 86 3.20 data class(纯稚的数据类) 86 3.21 refused bequest(被拒绝的遗赠) 87 3.22 comments(过多的注释) 87 第4章 构筑测试体系 89 4.1 自测试代码的价值 89 4.2 junit测试框架 91 4.3 添加更多测试 97 第5章 重构列表 103 5.1 重构的记录格式 103 5.2 寻找引用点 105 5.3 这些重构手法有多成熟 106 第6章 重新组织函数 109 6.1 extract method(提炼函数) 110 6.2 inline method(内联函数) 117 6.3 inline temp(内联临时变量) 119 6.4 replace temp with query(以查询取代临时变量) 120 6.5 introduce explaining variable(引入解释性变量) 124 6.6 split temporary variable(分解临时变量) 128 6.7 remove assignments to parameters(移除对参数的赋值) 131 6.8 replace method with method object(以函数对象取代函数) 135 6.9 substitute algorithm(替换算法) 139 第7章 在对象之间搬移特性 141 7.1 move method(搬移函数) 142 7.2 move field(搬移字段) 146 7.3 extract class(提炼类) 149 7.4 inline class(将类内联化) 154 7.5 hide delegate(隐藏“委托关系”) 157 7.6 remove middle man(移除中间人) 160 7.7 introduce foreign method(引入外加函数) 162 7.8 introduce local extension(引入本地扩展) 164 第8章 重新组织数据 169 8.1 self encapsulate field(自封装字段) 171 8.2 replace data value with object(以对象取代数据值) 175 8.3 change value to reference(将值对象改为引用对象) 179 8.4 change reference to value(将引用对象改为值对象) 183 8.5 replace array with object(以对象取代数组) 186 8.6 duplicate observed data(复制“被监视数据”) 189 8.7 change unidirectional association to bidirectional(将单向关联改为双向关联) 197 8.8 change bidirectional association to unidirectional(将双向关联改为单向关联) 200 8.9 replace magic number with symbolic constant(以字面常量取代魔法数) 204 8.10 encapsulate field(封装字段) 206 8.11 encapsulate collection(封装集合) 208 8.12 replace record with data class(以数据类取代记录) 217 8.13 replace type code with class(以类取代类型码) 218 8.14 replace type code with subclasses(以子类取代类型码) 223 8.15 replace type code with state/strategy(以state/strategy取代类型码) 227 8.16 replace subclass with fields(以字段取代子类) 232 第9章 简化条件表达式 237 9.1 decompose conditional(分解条件表达式) 238 9.2 consolidate conditional expression(合并条件表达式) 240 9.3 consolidate duplicate conditional fragments(合并重复的条件片段) 243 9.4 remove control flag(移除控制标记) 245 9.5 replace nested conditional with guard clauses(以卫语句取代嵌套条件表达式) 250 9.6 replace conditional with polymorphism(以多态取代条件表达式) 255 9.7 introduce null object(引入null对象) 260 9.8 introduce assertion(引入断言) 267 第10章 简化函数调用 271 10.1 rename method(函数改名) 273 10.2 add parameter(添加参数) 275 10.3 remove parameter(移除参数) 277 10.4 separate query from modifier(将查询函数和修改函数分离) 279 10.5 parameterize method(令函数携带参数) 283 10.6 replace parameter with explicit methods(以明确函数取代参数) 285 10.7 preserve whole object(保持对象完整) 288 10.8 replace parameter with methods(以函数取代参数) 292 10.9 introduce parameter object(引入参数对象) 295 10.10 remove setting method(移除设值函数) 300 10.11 hide method(隐藏函数) 303 10.12 replace constructor with factory method(以工厂函数取代构造函数) 304 10.13 encapsulate downcast(封装向下转型) 308 10.14 replace error code with exception(以异常取代错误码) 310 10.15 replace exception with test(以测试取代异常) 315 第11章 处理概括关系 319 11.1 pull up field(字段上移) 320 11.2 pull up method(函数上移) 322 11.3 pull up constructor body(构造函数本体上移) 325 11.4 push down method(函数下移) 328 11.5 push down field(字段下移) 329 11.6 extract subclass(提炼子类) 330 11.7 extract superclass(提炼超类) 336 11.8 extract interface(提炼接口) 341 11.9 collapse hierarchy(折叠继承体系) 344 11.10 form tem plate method(塑造模板函数) 345 11.11 replace inheritance with delegation(以委托取代继承) 352 11.12 replace delegation with inheritance(以继承取代委托) 355 第12章 大型重构 359 12.1 tease apart inheritance(梳理并分解继承体系) 362 12.2 convert procedural design to objects(将过程化设计转化为对象设计) 368 12.3 separate domain from presentation(将领域和表述/显示分离) 370 12.4 extract hierarchy(提炼继承体系) 375 第13章 重构,复用与现实 379 13.1 现实的检验 380 13.2 为什么开发者不愿意重构他们的程序 381 13.3 再论现实的检验 394 13.4 重构的资源和参考资料 394 13.5 从重构联想到软件复用和技术传播 395 13.6 小结 397 13.7 参考文献 397 第14章 重构工具 401 14.1 使用工具进行重构 401 14.2 重构工具的技术标准 403 14.3 重构工具的实用标准 405 14.4 小结 407 第15章 总结 409 参考书目 413 要点列表 417 索引 419 Clean Code 代码整洁之道(中文带书签) 第1章 整洁代码 1 1.1 要有代码 2 1.2 糟糕的代码 2 1.3 混乱的代价 3 1.3.1 华丽新设计 4 1.3.2 态度 4 1.3.3 迷题 5 1.3.4 整洁代码的艺术 5 1.3.5 什么是整洁代码 6 1.4 思想流派 10 1.5 我们是作者 11 1.6 童子军军规 12 1.7 前传与原则 12 1.8 小结 12 1.9 文献 13 第2章 有意义的命名 15 2.1 介绍 15 2.2 名副其实 16 2.3 避免误导 17 2.4 做有意义的区分 18 2.5 使用读得出来的名称 19 2.6 使用可搜索的名称 20 2.7 避免使用编码 21 2.7.1 匈牙利语标记法 21 2.7.2 成员前缀 21 2.7.3 接口和实现 22 2.8 避免思维映射 22 2.9  类名 23 2.10 方法名 23 2.11 别扮可爱 23 2.12 每个概念对应一个词 24 2.13 别用双关语 24 2.14 使用解决方案领域名称 25 2.15 使用源自所涉问题领域的名称 25 2.16 添加有意义的语境 25 2.17 不要添加没用的语境 27 2.18 最后的话 27 第3章 函数 29 3.1 短小 32 3.2 只做一件事 33 3.3 每个函数一个抽象层级 34 3.4 switch语句 35 3.5 使用描述性的名称 36 3.6 函数参数 37 3.6.1 一元函数的普遍形式 38 3.6.2 标识参数 38 3.6.3 二元函数 38 3.6.4 三元函数 39 3.6.5 参数对象 39 3.6.6 参数列表 40 3.6.7 动词与关键字 40 3.7 无副作用 40 3.8 分隔指令与询问 42 3.9 使用异常替代返回错误码 42 3.9.1 抽离Try/Catch代码块 43 3.9.2 错误处理就是一件事 44 3.9.3 Error.java依赖磁铁 44 3.10 别重复自己 44 3.11 结构化编程 45 3.12 如何写出这样的函数 45 3.13 小结 45 3.14 SetupTeardownIncluder程序 46 3.15 文献 48 第4章 注释 49 4.1 注释不能美化糟糕的代码 50 4.2 用代码来阐述 51 4.3 好注释 51 4.3.1 法律信息 51 4.3.2 提供信息的注释 51 4.3.3 对意图的解释 52 4.3.4 阐释 53 4.3.5 警示 53 4.3.6 TODO注释 54 4.3.7 放大 54 4.3.8 公共API中的Javadoc 55 4.4 坏注释 55 4.4.1 喃喃自语 55 4.4.2 多余的注释 56 4.4.3 误导性注释 58 4.4.4 循规式注释 58 4.4.5 日志式注释 59 4.4.6 废话注释 59 4.4.7 可怕的废话 61 4.4.8 能用函数或变量时就别用注释 62 4.4.9 位置标记 62 4.4.10 括号后面的注释 62 4.4.11 归属与署名 63 4.4.12 注释掉的代码 63 4.4.13 HTML注释 64 4.4.14 非本地信息 64 4.4.15 信息过多 65 4.4.16 不明显的联系 65 4.4.17 函数头 66 4.4.18 非公共代码中的Javadoc 66 4.4.19 范例 66 4.5 文献 69 第5章 格式 71 5.1 格式的目的 72 5.2 垂直格式 72 5.2.1 向报纸学习 73 5.2.2 概念间垂直方向上的区隔 73 5.2.3 垂直方向上的靠近 74 5.2.4 垂直距离 75 5.2.5 垂直顺序 79 5.3 横向格式 79 5.3.1 水平方向上的区隔与靠近 80 5.3.2 水平对齐 81 5.3.3 缩进 82 5.3.4 空范围 84 5.4 团队规则 84 5.5 鲍勃大叔的格式规则 85 第6章 对象和数据结构 87 6.1 数据抽象 87 6.2 数据、对象的反对称性 89 6.3 得墨忒耳律 91 6.3.1 火车失事 91 6.3.2 混杂 92 6.3.3 隐藏结构 92 6.4 数据传送对象 93 6.5 小结 94 6.6 文献 94 第7章 错误处理 95 7.1 使用异常而非返回码 96 7.2 先写Try-Catch-Finally语句 97 7.3 使用不可控异常 98 7.4 给出异常发生的环境说明 99 7.5 依调用者需要定义异常类 99 7.6 定义常规流程 100 7.7 别返回null值 101 7.8 别传递null值 102 7.9 小结 103 7.10 文献 104 第8章 边界 105 8.1 使用第三方代码 106 8.2 浏览和学习边界 107 8.3 学习log4j 108 8.4 学习性测试的好处不只是免费 110 8.5 使用尚不存在的代码 110 8.6 整洁的边界 111 8.7 文献 112 第9章 单元测试 113 9.1 TDD三定律 114 9.2 保持测试整洁 115 9.3 整洁的测试 116 9.3.1 面向特定领域的测试语言 118 9.3.2 双重标准 119 9.4 每个测试一个断言 121 9.5 F.I.R.S.T. 122 9.6 小结 123 9.7 文献 124 第10章 类 125 10.1 类的组织 126 10.2 类应该短小 126 10.2.1 单一权责原则 128 10.2.2 内聚 129 10.2.3 保持内聚性就会得到许多短小的类 130 10.3 为了修改而组织 136 10.4 文献 139 第11章 系统 141 11.1 如何建造一个城市 142 11.2 将系统的构造与使用分开 142 11.2.1 分解main 143 11.2.2 工厂 143 11.2.3 依赖注入 144 11.3 扩容 145 11.4 Java代理 148 11.5 纯Java AOP框架 150 11.6 AspectJ的方面 152 11.7 测试驱动系统架构 153 11.8 优化决策 154 11.9 明智使用添加了可论证价值的标准 154 11.10 系统需要领域特定语言 154 11.11 小结 155 11.12 文献 155 第12章 迭进 157 12.1 通过迭进设计达到整洁目的 157 12.2 简单设计规则1:运行所有测试 158 12.3 简单设计规则2~4:重构 158 12.4 不可重复 159 12.5 表达力 161 12.6 尽可能少的类和方法 162 12.7 小结 162 12.8 文献 162 第13章 并发编程 163 13.1 为什么要并发 164 13.2 挑战 165 13.3 并发防御原则 166 13.3.1 单一权责原则 166 13.3.2 推论:限制数据作用域 166 13.3.3 推论:使用数据复本 167 13.3.4 推论:线程应尽可能地独立 167 13.4 了解Java库 167 13.5 了解执行模型 168 13.5.1 生产者-消费者模型 169 13.5.2 读者-作者模型 169 13.5.3 宴席哲学家 169 13.6 警惕同步方法之间的依赖 169 13.7 保持同步区域微小 170 13.8 很难编写正确的关闭代码 170 13.9 测试线程代码 171 13.9.1 将伪失败看作可能的线程问题 171 13.9.2 先使非线程代码可工作 171 13.9.3 编写可插拔的线程代码 172 13.9.4 编写可调整的线程代码 172 13.9.5 运行多于处理器数量的线程 172 13.9.6 在不同平台上运行 172 13.9.7 装置试错代码 173 13.9.8 硬编码 173 13.9.9 自动化 174 13.10 小结 175 13.11 文献 175 第14章 逐步改进 176 14.1 Args的实现 177 14.2 Args:草稿 183 14.2.1 所以我暂停了 195 14.2.2 渐进 195 14.3 字符串参数 197 14.4 小结 234 第15章 JUnit内幕 235 15.1 JUnit框架 236 15.2 小结 249 第16章 重构SerialDate 251 16.1 首先,让它能工作 252 16.2 让它做对 254 16.3 小结 266 16.4 文献 267 第17章 味道与启发 269 17.1 注释 270 17.2 环境 271 17.3 函数 271 17.4 一般性问题 272 17.5 Java 288 17.6 名称 291 17.7 测试 294 17.8 小结 295 17.9 文献 296 附录A 并发编程II 297 A.1 客户端/服务器的例子 297 A.1.1 服务器 297 A.1.2 添加线程代码 298 A.1.3 观察服务器端 299 A.1.4 小结 301 A.2 执行的可能路径 301 A.2.1 路径数量 302 A.2.2 深入挖掘 303 A.2.3 小结 305 A.3 了解类库 305 A.3.1 Executor框架 305 A.3.2 非锁定的解决方案 306 A.3.3 非线程安全类 307 A.4 方法之间的依赖可能破坏并发代码 308 A.4.1 容忍错误 309 A.4.2 基于客户代码的锁定 309 A.4.3 基于服务端的锁定 311 A.5 提升吞吐量 312 A.5.1 单线程条件下的吞吐量 313 A.5.2 多线程条件下的吞吐量 313 A.6 死锁 314 A.6.1 互斥 315 A.6.2 上锁及等待 315 A.6.3 无抢先机制 315 A.6.4 循环等待 315 A.6.5 不互斥 316 A.6.6 不上锁及等待 316 A.6.7 满足抢先机制 317 A.6.8 不做循环等待 317 A.7 测试多线程代码 317 A.8 测试线程代码的工具支持 320 A.9 小结 320 A.10 教程:完整代码范例 321 A.10.1 客户端/服务器非线程代码 321 A.10.2 使用线程的客户端/服务器代码 324 附录B org.jfree.date.SerialDate 327 结束语 389

立即下载
重构:改善既有代码设计.[美]Martin Fowler.epub【文字版手机格式】

重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。多年前,正是本书原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。本书也因此成为与《设计模式》齐名的经典著作,被译为中、德、俄、日等众多语言,在世界范围内畅销不衰。 本书凝聚了软件开发社区专家多年摸索而获得的宝贵经验,拥有不因时光流逝而磨灭的价值。今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。 第1章 重构,第一个案例 1.1 起点 1.2 重构的第一步 1.3 分解并重组statement() 1.4 运用多态取代与价格相关的条件逻辑 1.5 结语 第2章 重构原则 2.1 何谓重构 2.2 为何重构 2.3 何时重构 2.4 怎么对经理说 2.5 重构的难题 2.6 重构与设计 2.7 重构与性能 2.8 重构起源何处 第3章 代码的坏味道 3.1 Duplicated Code(重复代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大的类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shotgun Surgery(霰弹式修改) 3.7 Feature Envy(依恋情结) 3.8 Data Clumps(数据泥团) 3.9 Primitive Obsession(基本类型偏执) 3.10 Switch Statements(switch惊悚现身) 3.11 Parallel InheritanceHierarchies(平行继承体系) 3.12 Lazy Class(冗赘类) 3.13 Speculative Generality(夸夸其谈未来性) 3.14 Temporary Field(令人迷惑的暂时字段) 3.15 Message Chains(过度耦合的消息链) 3.16 Middle Man(中间人) 3.17 Inappropriate Intimacy(狎昵关系) 3.18 Alternative Classes with Different Interfaces(异曲同工的类) 3.19 Incomplete Library Class(不完美的库类) 3.20 Data Class(纯稚的数据类) 3.21 Refused Bequest(被拒绝的遗赠) 3.22 Comments(过多的注释) 第4章 构筑测试体系 4.1 自测试代码的价值 4.2 JUnit测试框架 4.3 添加更多测试 第5章 重构列表 5.1 重构的记录格式 5.2 寻找引用点 5.3 这些重构手法有多成熟 第6章 重新组织函数 6.1 Extract Method(提炼函数) 6.2 Inline Method(内联函数) 6.3 Inline Temp(内联临时变量) 6.4 Replace Temp with Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引入解释性变量) 6.6 Split Temporary Variable(分解临时变量) 6.7 Remove Assignments to Parameters(移除对参数的赋值) 6.8 Replace Method with Method Object(以函数对象取代函数) 6.9 Substitute Algorithm(替换算法) 第7章 在对象之间搬移特性 7.1 Move Method(搬移函数) 7.2 Move Field(搬移字段) 7.3 Extract Class(提炼类) 7.4 Inline Class(将类内联化) 7.5 Hide Delegate(隐藏“委托关系”) 7.6 Remove Middle Man(移除中间人) 7.7 Introduce Foreign Method(引入外加函数) 7.8 Introduce Local Extension(引入本地扩展) 第8章 重新组织数据 8.1 Self Encapsulate Field(自封装字段) 8.2 Replace Data Value with Object(以对象取代数据值) 8.3 Change Value to Reference(将值对象改为引用对象) 8.4 Change Reference to Value(将引用对象改为值对象) 8.5 Replace Array with Object(以对象取代数组) 8.6 Duplicate Observed Data(复制“被监视数据”) 8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) 8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) 8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数) 8.10 Encapsulate Field(封装字段) 8.11 Encapsulate Collection(封装集合) 8.12 Replace Record with Data Class(以数据类取代记录) 8.13 Replace Type Code with Class(以类取代类型码) 8.14 Replace Type Code with Subclasses(以子类取代类型码) 8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码) 8.16 Replace Subclass with Fields(以字段取代子类) 第9章 简化条件表达式 9.1 Decompose Conditional(分解条件表达式) 9.2 Consolidate Conditional [removed]合并条件表达式) 9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) 9.4 Remove Control Flag(移除控制标记) 9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式) 9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) 9.7 Introduce Null Object(引入Null对象) 9.8 Introduce Assertion(引入断言) 第10章 简化函数调用 10.1 Rename Method(函数改名) 10.2 Add Parameter(添加参数) 10.3 Remove Parameter(移除参数) 10.4 Separate Query from Modifier(将查询函数和修改函数分离) 10.5 Parameterize Method(令函数携带参数) 10.6 Replace Parameter with Explicit Methods(以明确函数取代参数) 10.7 Preserve Whole Object(保持对象完整) 10.8 Replace Parameter with Methods(以函数取代参数) 10.9 Introduce Parameter Object(引入参数对象) 10.10 Remove Setting Method(移除设值函数) 10.11 Hide Method(隐藏函数) 10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数) 10.13 Encapsulate Downcast(封装向下转型) 10.14 Replace Error Code with Exception(以异常取代错误码) 10.15 Replace Exception with Test(以测试取代异常) 第11章 处理概括关系 11.1 Pull Up Field(字段上移) 11.2 Pull Up Method(函数上移) 11.3 Pull Up Constructor Body(构造函数本体上移) 11.4 Push Down Method(函数下移) 11.5 Push Down Field(字段下移) 11.6 Extract Subclass(提炼子类) 11.7 Extract Superclass(提炼超类) 11.8 Extract Interface(提炼接口) 11.9 Collapse Hierarchy(折叠继承体系) 11.10 Form Tem Plate Method(塑造模板函数) 11.11 Replace Inheritance with Delegation(以委托取代继承) 11.12 Replace Delegation with Inheritance(以继承取代委托) 第12章 大型重构 12.1 Tease Apart Inheritance(梳理并分解继承体系) 12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计) 12.3 Separate Domain from Presentation(将领域和表述/显示分离) 12.4 Extract Hierarchy(提炼继承体系) 第13章 重构,复用与现实 13.1 现实的检验 13.2 为什么开发者不愿意重构他们的程序 13.3 再论现实的检验 13.4 重构的资源和参考资料 13.5 从重构联想到软件复用和技术传播 13.6 小结 13.7 参考文献 第14章 重构工具 14.1 使用工具进行重构 14.2 重构工具的技术标准 14.3 重构工具的实用标准 14.4 小结 第15章 总结 参考书目 要点列表 索引

立即下载
重构-改善既有代码设计[高清完整版.完整书签].pdf

软件工程领域的超级经典巨著 与另一巨著《设计模式》并称"软工双雄" 全美销量超过100000册 亚马逊书店五星书 在本书中 作者Martin Fowler充分展示了何处可能需要重构 以及如何将不好的设计改造为良好的设计 当对象技术成为老生常谈之后 尤其在Java编程语言之中 新的问题也在软件开发社区中浮现了出来 缺乏经验的开发人员完成了大量粗劣设计 获得的

立即下载
JAVA 重构 改善既有代码设计(完整版)

《改善既有代码的设计》清晰地揭示了重构的过程,解释了重构的原理和最佳实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。

立即下载
重构 改善既有代码设计[中文高清版] PDF

重构 改善既有代码的设计[中文高清版] PDF 重构 改善既有代码的设计[中文高清版] PDF 重构 改善既有代码的设计[中文高清版] PDF

立即下载
[免费高清PDF最新]重构-改善既有代码设计 高清带书签.rar

[免费高清PDF最新]重构-改善既有代码的设计 高清带书签.rar[免费高清PDF最新]重构-改善既有代码的设计 高清带书签.rar

立即下载
关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
点击完成任务获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
img

重构--修改既有代码的设计

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验,不建议使用迅雷下载
VIP下载
您今日下载次数已达上限(为了良好下载体验及使用,每位用户24小时之内最多可下载20个资源)

积分不足!

资源所需积分/C币 当前拥有积分
您可以选择
开通VIP
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
为了良好体验,不建议使用迅雷下载
确认下载
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
为了良好体验,不建议使用迅雷下载
VIP和C币套餐优惠
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
确认下载
下载
您还未下载过该资源
无法举报自己的资源

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可返还被扣除的积分

  • 举报人:
  • 被举报人:
  • *类型:
    • *投诉人姓名:
    • *投诉人联系方式:
    • *版权证明:
  • *详细原因: