2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文章,每天发布一篇,介绍一种重构手段,连续发文31篇,故得名“重构三十一天:你应该掌握的重构手段”.此外,Sean Chambers还将这31篇文章[即31种重构手段]整理成一本电子书, 以下是博客原文链接和电子书下载地址: 博客原文:http://lostechies.com/seanchamber…
理解:本文中的“封装条件”是指条件关系比较复杂时,代码的可读性会比较差,所以这时我们应当根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或者方法,如果条件表达式不需要参数则可以提取成属性,如果条件表达式需要参数则可以提取成方法. 详解:重构前code using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namesp…
多态(polymorphism)是面向对象的重要特性,简单可理解为:一个接口,多种实现. 当你的代码中存在通过不同的类型执行不同的操作,包含大量if else或者switch语句时,就可以考虑进行重构,将方法封装到类中,并通过多态进行调用. 代码重构前: using System; using System.Collections.Generic; using System.Linq; using System.Text; using LosTechies.DaysOfRefactoring.S…
一次项目代码重构-使用spring容器干掉条件判断 这是在一次公司项目中进行重构时,一些复杂业务时想到的一个去掉一些if else的办法.能够使代码逻辑更加清晰,减少一些业务上的耦合. 业务说明 我所在的是一个做保险的项目组,这次重构是针对其中的保费计算和核保的业务. 项目重构之前,在保费计算的接口中,有大量的条件判断语句来判断这次进行保费计算的产品是哪一个,然后调用该产品的保费计算方法.代码大致看起来就是这个样子: //产品编号 String product = "123123";…
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用.   当代码中包含许多条件判断,为了改善代码的可读性和可维护性,我们可以将条件封装. 有两种封装方式: 一.无参数的条件判断,封装为属性   重构前代码 public class RemoteControl { private string[] Functions { get; set; } private stri…
当代码中充斥着若干条件判断时,代码的真正意图会迷失于这些条件判断之中.这时我喜欢将条件判断提取到一个易于读取的属性或方法(如果有参数)中.重构之前的代码如下: ) { return "doSomething";} return null;}} 重构之后,代码的可读性更强,意图更明显: ;} public String PerformCoolFunction(String buttonPressed) { // Determine if we are controlling some e…
理解:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断. 详解: 重构前代码: public class Microwave { private IMicrowaveMotor Motor { get; set; } public bool Start(object food) { bool foodCooked = false; try { Motor.Cook(food); foodCooked = true; } catch (InUseException…
重构没有什么出处,是我平时经常使用而总结出来的.欢迎您发表任何改进意见或建议.我相信一定还有其他比较好的重构可以解决类似的问题.  我曾无数次面对的一个代码坏味道就是,使用异常来控制程序流程.您可能会看到类似的代码: public class Microwave { private MicrowaveMotor Motor;//getter setter public Boolean start(Object food) { Boolean foodCooked = false; try { M…
注:该随笔受启发于 <重构与模式>  第七章 第7.6小节 用Command替换条件调度程序 . 对于Command不做过多解释,这里我找了两个例子.供部分园友参阅:Command例子1 Command例子2 . 条件调度程序:我对这个名词的理解为,它是相对简单的选择结构 与 相对独立的业务逻辑的结合体. 话不是很好理解,下面举个小例子吧. 重构前的代码: /// <summary> /// 很简单的选择分支 一层 if else /// N个 相对独立 任务 /// </s…
linux 环境有提供好的pthread_cond_wait() 和 phread_signal().pthread_broadcast() windows需要自己封装,利用semophore控制线程等待和释放,先简单谈一下设计好后api该 如何使用. 假设我们封装好条件变量等待函数名字叫做wait(Mutex& mutex),Mutex是之前我们封装的 条件变量,文章最下边会给出这些文件的下载地址,在这里读者当做linux 的mutex即可.我们 封装的释放函数为signal(),广播函数为b…