`
- 浏览:
12414 次
- 性别:
- 来自:
上海
-
在软件工程中,建立完美的需求与设计,按照既有的规范编写标准统一的代码。
但是这只是个美好的愿望。
需求会改变,设计也会改变,程序员写出的代码也需要改变。修改代码不紧紧是为了完成
业务功能,还需要考虑其他的一些问题,比如以后对该代码维护是否容易。
这里代码是否容易维护包括:
1.代码维护者是否能很容易读懂你的代码。
2.代码维护者是否能够很方便修改你的代码。
当你担负着额外的责任来修改代码时,有一个很光鲜的名字来表示它,就是:重构。
重构代码,既是一个程序员的责任,也是一个可能发现bug的方式,甚至还能提高编程速
度。总之有很多好处。
代码重构之后,可能会给软件项目带来bug,或者程序运行性能降低,或者过多的重构延
误了项目的交付日期。总之也有很多坏处。
现在说到这里看似碰到了很多问题。我们知道问题肯定不仅仅是上面这些!!
有关重构的问题国外有牛人研究过(还包括学术方面的研究哦),并且给出了一些具体的
解决问题的措施和建议。如果有同学想了解些重构方面的东西的话,可以考虑买本Martin
Fowler的《Refactoring Improving the Design of Existing Code》了解下。这本书中
文译本翻译的也不错。
我最近正在读这本书。感觉很不错!!!
---------------------------------------
代码有那些重构手法呢?
一、重新组织函数部分
1.Extract Method
2.Inline Method
3.Inline Temp
4.Replace Temp with Query
5.Introduce Explaining Variable
6.Split Temporary Variable
7.Remove Assignments Parameters
8.Replace Method with Method Object
9.Substitue Algorithm
二、简化条件表达式
1.Decompose Conditional
2.Consolidate Conditional Expression
3.Consolidate Duplicate Conditional Fragments
4.Remove Control Flag
5.Replace Nested Conditional with Guard Clause
6.Replace Conditional with Polymorphism
7.Introduce Null Ojbect
这个东西有点高深,正在理解。
8.Introduce Assertion
上面这两种类型的重构,我觉得最实用。在最近的项目中,我试图在运用这些东西。
目标一:
代码要写的漂亮,写尽量少的注释,读代码本身就像读注释一样。
三、简化函数调用
1.Rename Method
2.Add Parameter
3.Remove Parameter
4.Parameterize Method
5.Replace Parameter with Explicit Methods
6.Preserve Whole Object
7.Replace Parameter with Methods
8.separate Query from Modifier
9.Introduce Parameter Object
10.Remove Setting Method
11.Hide Method
12.Replace Constructor with Factory Method
13.Encapsulate Downcast
14.Replace error code with Exception
15.Replace Exception with Test
在程序中总能看到不同的人有不同的编程特点。有些程序很明显是可以通过上面的一些
手法来重构的,但是就是不去这么做,宁愿写重复代码,宁愿干自己都觉得不合理的事
情。因为在项目中,怕承担风险是人趋利避害的一个本性。所以这种想法是代码越来越
丑陋的一个很大因素。
四、重新组织数据
1.SelfEncapsulate Field
2.Replace Data Value with Object
3.Change Value to Reference
4.Change Reference to Value
5.Replace Array with Object
6.Duplicate Observed Data
7.Change Unidirectional Association to Bidirectional
8.Change Bidirectional Association to Unidirectional
9.Replace Magic Number Symbolic Constant
10.Encapsulate Field
11.Encapsulate Collection
12.Replace Record with Data Class
13.Replace Type Code with Class
14.Replace Type Code with subclass
15.Replace Type Code with State/Strategy
16.Replace Subclass with Fields
这一部分的重构方法里,象6,14,15等助于掌握某些设计模式,比如观察者模式,策
略模式等。接下来两类重构手法通常也是和上面这个手法结合使用。因为它们的主要关
注点是对对象和类进行的重构。
五、在对象中搬移特性:
1.Move Method
2.Move Field
3.Extract Class
4.Inline Class
5.Hide Delegate
6.Remove Middle Man
7.Introduce Foreign Method
8.Introduce Local Extension
六、处理概括关系
1.Pull up Field
2.Pull up Method
3.pull up Constructor Body
4.Push down Method
5.Push down Filed
6.Extract Subclass
7.Extract Superclass
8.Extract Interface
9.Collapse Hierarchy
10.Form Tem Plate Method
11.Replace Inheritance with Delegation
12.Replace Delegation with Inheritance
TODO
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
重构-改善既有代码的设计的中文版,程序员进阶的好东西,必须掌握的技能。
Go社区的参考,涵盖了编写干净代码的基础,并讨论了特定于Go的具体重构示例。 Clean Go代码序言:为什么要编写Clean代码? 本文档是Go社区的参考,该社区旨在帮助开发人员编写更简洁的代码。 无论您是从事个人项目...
代码重构是早期学习HTML和CSS的重要实践,该项目的最终目标是熟悉代码的清理,组织和结构化,其目的是帮助其他开发人员轻松浏览文件并了解其构建方式。 请随时发送提示,给我大喊大叫或在以下位置添加我: :
作为程序员,我们都在编写各种各样的代码,然而有些程序员编写的代码则更为优秀些。差别是显然的。编写好的代码并不是所有的开发者都能够掌握的技巧。...这种技能之一就包括重构你或其他人编写的代码。
本书以网站重构为楔子,深刻而直接地指出了Web前端开发中存在的重要问题—代码难以维护。如何才能提高代码的可维护性?人是最关键的因素!于是本书紧接着全方位地解析了作为一名合格的前端开发工程师应该掌握的技能...
首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在...
重构代码的气味这是一个交互式的,远程友好的讲习班,讲授重构。 研讨会的总体流程如下: (10分钟)主持人进行了演示,定义了重构和代码气味。 (15分钟),参加者分别在70行的Ruby文件中识别特定的结构问题,并将...
在公司已有编码规范的指导下,审慎地编排代码以使代码尽可能清晰,是一项非常重要的技能。 如果重构/ / 修改其他风格的代码时,比较明智的做法是根据 现有 代码 的 现有风格继续编写代码,或者使用格式转换工具进行...
在本练习中,您应该能够展示您使用 HTML/CSS/SCSS 的前端重构技能。 目标是在不改变页面视觉外观的情况下改进当前的代码库。 要求: 代码应该可重用于构建未来的页面和 UI 组件 代码应该易于理解和维护 设计应该...
仓库服务器这是一个扭曲的回声服务器,其构建目的是与我也创建的Kivy客户端android应用进行交互,这是前一段时间编写的代码的重构版本,并且已经遍及整个地方。 这是一种创建自定义android客户端和服务器的简单方法...
清理与代码相关的任务,以提高技能。 任务分为几组: 基本的 先进的 基本的 根据主要的干净代码原则,任务是重构您认为看起来很奇怪/不清楚/有代码气味的所有内容。 重构期间请注意: 命名 功能 评论 格式化 类和...
DotNetCoding(http//www.dotnetcoding.net)是一款帮助...采用此开发平台,能够复用成熟的开发架构,自动生成所有非商业有关的代码,在公司范围内不断的积累开发技能和经验,极大的提高开发效率,规范开发,提高开发质量。
这是一个偶数周,因此不会给您任何入门代码。 相反,您将从头创建一个Web应用程序! 本周,您将建立一个投资组合页面,您可以在课程进行过程中添加该页面。 工作组合可以向希望填补兼职或全职职位的雇主展示您的...
在这里你可以了解到:完整的Web开发,运维,部署,维护如何写好代码——重构、测试、模式遗留代码、遗留系统的形成在这里你可以get到:不同阶段所需的不同技能相关书单推荐相关技术栈推荐Web应用解决方案在这里你还...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
第三部分(10~13章),作者分享了很多只有在他们的教学现场才能获得的经验,这些经验是优秀架构师应该具备的,具体包括共性和可变性分析、以开放关闭原则为目标的重构、需求与功能接口、何时以及如何使用继承等重要...
经典的代码重构书籍,这是一本重构-改善既有代码的设计的源码。交给你如何优化代码,这是通过自己读书可以自我增长的技能。
能将模块化源代码自动合并为高效执行代码的模块化引擎,兼顾代码组织、多人协作和运行效率优化 基于socket的驻留daemon,支持Linux和WIN 安装指南 首先把游戏文件属性全部改成777,然后如果之前没有建过mysql结构,...
综合规模以上的气候重建,以及基本技能指标 输入: y:气候时间序列,充满了多年的NaN以进行重建 X:代理服务器数组(与y相同的行数),每列代表一个代理服务器系列 输出: yhat:代理重建的气候时间序列 r2:工具...