代码重构,《重构-改善既有代码的设计》读书笔记

坏味道 特征 情况及处理方式 目标 重复代码 1.重复的表达式 2.不同算法做相同的事 3.类似代码 同一个类的两个函数有相同表达式 重复代码提取为方法 相同表达式只在一个类的一个方法出现,供其他方法调用 兄弟类含有相同表达式 重复代码提取为方法 提升方法到父类 不相干类含有相同代码 提取为独立类供调用 过长函数 1.代码前面有注释 2.条件表达式 3.循环 提取方法 每个方法只做一件事,方法要定... [阅读全文]

条件表达式,重构之简化条件表达式

1. Replace Nested Condition with Guard Clauses(以卫语句取代嵌套条件表达式) Clauses[klɔ:zis] :字句 Guard[ga:d]: 守卫、看守 Nesting: 嵌套 范例: 想象一个薪酬系统,其中以特区规则处理死亡、驻外、退休员工的薪资,这些情况不常有,但... [阅读全文]

重构测试,JavaScript重构之JavaScript的测试

进行JavaScript重构时,我希望引入易于使用的测试框架来保证重构的顺利进行,未来能持续通过测试代码对JavaScript逻辑的正确性做保障。 JsUnit (http://sourceforge.net/projects/jsunit/,http://www.jsunit.net/) JsUnit是一个独立的JavaScript单元测试框架,和JUnit差不多,没有上手难度,包括传统的set... [阅读全文]

代码重构,步步为营 .NET 代码重构学习笔记总结

历时一个多月的时间,代码重构系列终于写完了,代码的坏味道大家一看都不会陌生,绝对是在我们的编程中如影随形的,现在把相应的重构方法和设计模式总结出来,以供大家参考.因为不论是重构还是应用设计模式,一切的目的都是为了软件构架的“优雅”,而不是炫耀技术。 步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一、为何要代码重构 步步为营 .NET 代码重构学习笔记 二、提... [阅读全文]

代码重构,步步为营 .NET 代码重构学习笔记 十四

一、Form Templlate Method(塑造模板函数) 动机(Motivation) 有一些subclasses,其中相应的某些函数以相同顺序执行类似的措施,但各措施实际上有所不同。将各个措施分别放进独立函数中,并保持它们都有相同的签名式(signature),于是原函数也就变得相同了。然后将原函数上移至baseclass。 示例 public abstract class Site { ... [阅读全文]

代码重构,步步为营 .NET 代码重构学习笔记 十三

一、Replace Exception with Test(以测试取代异常) 动机(Motivation) 面对一个[调用者可预先加以检查]的条件,你抛出了一个异常。修改调用者,使它在调用函数之前先做检查。 示例 private Dictionary _values; public double GetValueForPeriod(int periodNumber) { try { return ... [阅读全文]

代码重构,重构C资源释放代码

今天我在维护一个C项目的时候发现有的函数内部有很多的return语句,每个return前面都有一段相同的资源释放的代码。代码看起来就像这样:int f() { char *p1 = (char*)malloc(1024 * sizeof(char)); int *p2 = (int*)malloc(10 * sizeof(int)); ... if (...) { free(p1); fre... [阅读全文]

代码重构,步步为营 .NET 代码重构学习笔记 一、为何要代码重构

最近在学习代码重构,根据自己的学习进度写一个关于代码重构的系列出来,供自己总结提高,也希望能对他人有所帮助。园子里有圣殿骑士的31 天重构学习笔记 给了我很多的启发,自己也在学习《Refactoring improving the Designe of Existing Code》(重构 改善既有代码的设计),希望在代码重构思想上能有自己的心得. 一、为什么要重构(Refactoring) ... [阅读全文]

网站重构,《重构》 — Java示例:影片出租店程序(6、重构——引入状态模式)

示例:影片出租店程序(重构——引入状态模式) 由于考虑到“影片分类结构”、“费用计算规则”或“常客积点计算规则”在未来可能会发生改变,所以通过引入“状态模式”将“费用计算”和“常客积点计算”中“因条件而异的代码”替换掉。 步骤: 1、移动“金额计算”方法 —— “搬移方法(Move Method)” 由于Rental类的GetCharge方法中使用到了Movie类的属性,所以这暗示应将GetCh... [阅读全文]

网站重构,《重构》 — Java示例:影片出租店程序(4、添加功能)

示例:影片出租店程序(添加功能) 说明: 通过对计算逻辑的提炼,可以完成一个HtmlStatement(),并复用原本Statement()内的所有计算。 代码: package Movie_Ref; import java.util.Enumeration; import java.util.Vector; public class Customer { private String _nam... [阅读全文]

网站重构,《重构》 — Delphi示例:影片出租店程序(4、添加功能)

示例:影片出租店程序(添加功能) 说明: 通过对计算逻辑的提炼,可以完成一个HtmlStatement(),并复用原本Statement()内的所有计算。 代码: type //--顾客 TCustomer = class private FName: string; FRentals: TObjectList; function GetName: string; function ... [阅读全文]

ldquo,代码重构-利用“反射机制”消除条件语句

1. 代码中时常出现条件语句分支,这样的代码很不利于扩展。例如下面代码片段: if (context.Request["action"] != null) { string action = context.Request["action"]; switch (action) { case "a": ActionA(); break; case "b": ActionB(); break; def... [阅读全文]

网站重构,《重构》 — Delphi示例:影片出租店程序(3、重构——分解并重组Statement)

示例:影片出租店程序(重构——分解并重组Statement) 步骤: 1、提炼“金额计算”代码 1.1、提炼“逻辑泥团”——“提炼方法(Extract Method)” Statement()中一个明显的“逻辑泥团”就是case语句,把它提炼到独立函数“AmountFor”中。 function TCustomer.Statement: string; var totalAmount: doub... [阅读全文]

网站重构,《重构》 — Java示例:影片出租店程序(3、重构——分解并重组Statement)

示例:影片出租店程序(重构——分解并重组Statement) 步骤: 1、提炼“金额计算”代码 1.1、提炼“逻辑泥团”——“提炼方法(Extract Method)” Statement()中一个明显的“逻辑泥团”就是switch语句,把它提炼到独立函数“AmountFor”中。 Eclipse工具重构步骤: (1)、选中代码   (2)、右键选择“Extract Method”   (3)、输... [阅读全文]

网站重构,《重构》 — Java示例:影片出租店程序(2、单元测试)

示例:影片出租店程序(单元测试) 注意: (1)、使用“eclipse”自带的JUnit单元测试   (2)、使用JUnit单元测试工具实现,其中 *其中setUp()方法是构造初始化环境; *测试方法总是以test+方法名构成; 代码: package movie; import junit.framework.TestCase; public class MovieTest extends ... [阅读全文]

网站重构,《重构》 — Java示例:影片出租店程序(1、重构前)

说明: 这是一个影片出租店用的程序,计算每一位顾客的消费金额并打印报表(statement),操作者告诉程序:顾客租了哪些影片、租期多长,程序便根据租赁时间和影片类型算出费用。影片分为三类;普通片、儿童片和新片。除了计算费用,还要为常客计算点数;点数会随着"租片种类是否为新片而有不同。 代码: 1、Test.java package movie; public class Test { /** ... [阅读全文]

网站重构,《重构》 — Delphi示例:影片出租店程序(2、单元测试)

说明: 重构的第一个步骤永远相同:为即将修改的代码建立一组可靠的测试环境。 注意: (1)、使用"CnPack"自带的DUNIT单元测试 (2)、使用DUNIT单元测试工具实现,其中 * TestFrameWork是每个TestCase都必须使用的,后面要使用的TTestCase等类的定义都在TestFrameWork中。 * Dunit是通过RTTI(RunTime Type Informati... [阅读全文]

数据库重构,数据库重构《Refactoring DataBase Evolutionary DataBase Design》介绍

说实话我也是前两周才知道有数据库重构这回事,当时听说这个概念的时候,唯一的反应就是:数据库居然也能重构?刚好上周去图书馆借书,看见了《数据库重构》这本书,就借回来看了几章。下面会结合自己的体会介绍一些这本书的一些观点。 数据库重构概念 数据库重构是对数据库Schema进行的简单改动,在保持行为和信息语义的前提下改进设计。 数据库重构可以重构数据库Schema的结构:比如表、视图的定义、修改; 重构... [阅读全文]

代码重构,C# 谈谈代码重构

代码重构 重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高 软件的扩展性和维护性。  一、为什么要重构(Refactoring) 1、·持续偏纠和改进软件设计。 2、·使代码更易为人所理解。 3、·帮助发现隐藏的代码缺陷。 4、·从长远来看,有助于提高... [阅读全文]

数据库重构,数据库重构《Refactoring DataBase Evolutionary DataBase Design》介绍

说实话我也是前两周才知道有数据库重构这回事,当时听说这个概念的时候,唯一的反应就是:数据库居然也能重构?刚好上周去图书馆借书,看见了《数据库重构》这本书,就借回来看了几章。下面会结合自己的体会介绍一些这本书的一些观点。 数据库重构概念 数据库重构是对数据库Schema进行的简单改动,在保持行为和信息语义的前提下改进设计。 数据库重构可以重构数据库Schema的结构:比如表、视图的定义、修改; 重构... [阅读全文]

代码重构,在代码重构中蜕变

这几天,要对我半年前写的代码进行一些整理工作,在看代码时发现当时有很多地方写得不够好,俗称的有“坏味道”,呵呵,重构,必须的。 几年前通读过《重构,改善既有代码的设计》一书,虽然对各种重构模式或方法记忆有限,但精髓还是记住了:改代码而不改变软件的外在表现,循序渐进。 其实,重构是一个开发人员的基本工作内容,是在每天的开发过程中都要用到的。离开了重构和测试,代码质量是难有保... [阅读全文]

网站重构,拥抱重构

惧怕重构 提到让你重构一个功能模块,提到让你去修改一个别人的bug,阅读别人的代码,你第一反应是什么?惧怕?想骂人?面对一个代码垃圾场,我想大家都会有些不安,尤其是面对测试团队,上线的压力。 重构需要勇气 面对一个代码垃圾场,光抱怨是没用的。需要鼓起勇气去面对重构。 如何实施重构 首先,需要大家思考以下一些问题: 1)代码垃圾场是如何形成的? 团队中有很多菜鸟?团队执行力不强?团... [阅读全文]

设计模式重构,重构之美之一改造面向过程式设计

使用面向对象语言进行过程式设计的例子,可谓俯拾皆是。看这段代码: public class SyncExecutor { public void executeSync() { syncSchools(); syncGrades(); syncFaculties(); }} 这段代码很清晰,分别执行了对学校、年级与教师信息的同步。一目了然,似乎没有什么问题。然而,如果深入阅读各个同步子方法,就... [阅读全文]

色彩重构,重构之美之一引入工厂方法支持扩展

在开发框架时,若要支持扩展性,引入工厂方法或许会成为神来之笔。例如,在QueryWrapper类的addResource()方法中,需要创建一个IndexWriter对象。 public class QueryWrapper { public final void addResource(RequestContext context) { log(”Add new resource.... [阅读全文]

代码重构方法,重构之美之一方法的长度

我曾经在一次演讲中,问过听众这样一个问题:“一个方法的理想行数最多不超过多少行?”如果问一千个人,或许会有一千条答案吧。 这是一个见仁见智的问题。在《软件开发沉思录》一书中,ThoughtWorks的技术负责人Jeff Bay认为:“一个常见的原则是将方法的行数控制在5行之内……”很多人对此感到不可思议。窃以为,关键不在于... [阅读全文]

autoui,OEA中的AutoUI重构(2)- 评审会议前的总体设计

之前已经写了一篇关于其中Command模块的重构:《OEA中AutoUI重构(1) - Command自动生成》。Command自动生成的重构作为本次重构的一个“前锋战”,尝试用OO的方式把原来的过程式的界面自动生成流程进行优化,以支持更好的可扩展性。Command自动生成较为独立,所以就单独先进行了重构,目前重构已经完成,效果较好:和原有系统完成兼容,同时插入了更多必需的扩展点。 本次重构主要是... [阅读全文]

autoui,OEA中AutoUI重构-新的Command生成设计

OEA框架的核心之一是AutoUI,其职责是面向领域模型及UI元模型进行生成统一的界面。 在本次的迭代开发中,需要对命令按钮的生成方式进行一些定制。由于原来并没有为这样的需求留有特别的扩展点,加之原来的生成代码是过程式的代码、且也变得比较冗长,所以我们决定对这一部分的代码进行重构。 原来的模式 历史代码中,为某一实体类生成命令按钮的流程是这样的: 找到实体类可用的所有命令按... [阅读全文]

web重构,WEB标准心得之网页重构的思路

点评:最近终于有心情把我的CSS重构一下。。由于这种写法的一部分是我自己琢磨出来的,带有偏好的做法。仅供参考。如果采用后被同事取笑,老板罚款,本人概不负责。我重构的时候,学习了一些行业标准的做法。主要思路来源于以下一些,比如Rest,Grid,Dry等等(不明含义者请自行Google)。1,Css文件的组织。Css文件采用按照Rest中的资源来进行组织, 比如User,那就有一个user.css,... [阅读全文]

网站重构,程序员应知——也说重构

从Martin Fowler最早提出重构的概念开始,到现在已经有很长时间了,重构已经是深入忍心了。与其说它是一种方法,不如说是一种思想、一种习惯。我自己在工作的过程中也一直在使用它来改进自己的程序,所以在此想说说自己的两点认识。重构不“挑食”上面已经提到,重构不仅仅是固定的那些方法,而更是一种思想和编码时候的习惯,所以,不管你是用那种语言编程,都可以应用重构。《重构》那本书... [阅读全文]

网站重构,程序员应知——也说重构

从Martin Fowler最早提出重构的概念开始,到现在已经有很长时间了,重构已经是深入忍心了。与其说它是一种方法,不如说是一种思想、一种习惯。我自己在工作的过程中也一直在使用它来改进自己的程序,所以在此想说说自己的两点认识。重构不“挑食”上面已经提到,重构不仅仅是固定的那些方法,而更是一种思想和编码时候的习惯,所以,不管你是用那种语言编程,都可以应用重构。《重构》那本书... [阅读全文]
1 共1条 分1页