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

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... [阅读全文]

网站重构,《重构》 — 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.... [阅读全文]

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

代码重构,最简单的重构,你会吗

最近玩Reporting Service报表,微软官方客户端展现实现中有这么一段代码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // Get report path from configur... [阅读全文]

三国演义开篇词,《重构之美》-开篇

关于代码的重构,已经是老调常弹。自Martin Fowler《重构》一书横空出世,到如今已有十年光景,对于重构,许多程序员已经耳熟能详。然而,每当我们面对项目压力时,常常会将重构置之脑后,抛到九霄云外。理由足够充分,言之凿凿:功能还未完成,何谈重构?究其原因,是因为我们还未将重构当做习惯。即便现在的许多IDE已经支持自动完成常见的重构手法,我们仍然会忘记,仍然会忽略。只因重构不能直接产生价值,只... [阅读全文]

网站重构,学会重构,避免重构误区

现在有太多是文章讨论各种重构的技术,咱们就不谈了,我们就谈谈要怎么重构。一谈到重构,大家大多认为是运用设计模式,来使你的代码看上去非常优雅。其实重构包括很多,一个变量名的修改、代码格式的编排、分解一个大方法的等等都是属于重构的范畴。我相信肯定有人和我一样,捧一本重构方面的书(《重构与模式》Joshua Kerievsky著,这本就不错),一劲的狂喊这样写代码太漂亮;可是丢开书本,面对自己的代码一直... [阅读全文]

代码重构,利用AOP重构代码

AOP是什么?    AOP是OOP的延续,Aspect Oriented Programming的缩写,即面向方面编程。AOP是GoF设计模式的延续,设计模式追求的是调用者和被调用者之间的解耦,AOP也是这种目标的一 种实现。    案例:在应用程序中,我们经常会对某一段程序做异常处理,或者是把一个方法的调用所消耗的时间体现在日志中,如果我们对每个方法都写具体的实现,我想并不是一件轻松的事情。对... [阅读全文]

代码重构,代码重构的一个示例

首先,我们有一个表达式如下所示:   很明显,这个表达式的变量名太没意义了,很不利于程序的可读性,所以,我们需要取一个有意义的变量名:   很好,不过,那个常量7是hard-code或是一个Magic number,而且,这常量没有名字也不利于代码的可读性啊。再改:   靠!上面,是这是哪门子的改法?(不过,我保证这是真实发生的),常量名也要有意义一点嘛,再改:   这还差不多,不过,名字可能会... [阅读全文]

网站重构,如何进行大规模重构

从定义上看,重构意味着改变程序的内部结构,而不改变外部的功能行为。这样做大多是为了提高程序的非功能性属性,从而提高代码的质量。然而,即便是经验丰富的敏捷开发者,在进行大规模的重构时也是如履薄冰。社区中的成员对掌控大规模重构的几种方式进行了讨论。  在最近的讨论中,Andreas想要知道三种可能完成大规模重构的方法中哪种最好。他的方式包括,一次完成——定义最终状态的结构,然后... [阅读全文]

代码重构工具,代码重构

  重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。  也许有人会问,为什么不在项目开始时多花些时间把设计做好,而要以后花时间来重构呢?要知道一个完美得可以预见未来任何变化的设计,或一个灵活得可以容纳任何扩展的设计是不存在的。系统设计人员对即将着手的项目往往只能从大方向予以把控,而无法... [阅读全文]
1 共1条 分1页