一天一个重构方法(13):删除箭头反模式
2009-06-04 06:01:51摘要:Remove Arrowhead Antipattern:删除箭头反模式 简单地说,当你使用大量的嵌套条件判断时,形成了箭头型的代码,这就是箭头反模式(arrowheadantipattern)。我经常在不同的代码库中看到这种现象,这提高了代码的圈复杂度(cyclomatic complexity)。下面的例子演示了箭头反模式: 阅读全文
摘要:Remove Arrowhead Antipattern:删除箭头反模式 简单地说,当你使用大量的嵌套条件判断时,形成了箭头型的代码,这就是箭头反模式(arrowheadantipattern)。我经常在不同的代码库中看到这种现象,这提高了代码的圈复杂度(cyclomatic complexity)。下面的例子演示了箭头反模式: 阅读全文
摘要:Remove Parameter:删除参数 本体方法不再需要某个参数,将该参数去除。 参数指出函数所需信息,不同的参数值代表不同的意义。函数调用者必须为每个参数操心该传什么东西进去。如果你不去掉多余参数,你就是让你的每一位用户多费一份心。 阅读全文
摘要:Add Parameter:添加参数 某个方法需要从调用端得到更多信息,为此方法添加一个对象参数,让该对象带进方法所需信息。 应用这个重构你只需多加入一些参数即可。简单吧。我就不举例了。 阅读全文
摘要:Rename Method:重命名方法 阅读全文
摘要:Substitute Algorithm:替换你的算法 如果你发现做一件事可以有更清晰的方式,就应该以较清晰的方式取代复杂方式。随着对问题有了更多理解,你往往会发现,在你的原先作法之外,有更简单的解决方案,此时你就需要将方法本体替换为另一个算法。 阅读全文
摘要:Encapsulate Conditional:封装条件 当代码中充斥着若干条件判断时,代码的真正意图会迷失于这些条件判断之中。这时我喜欢将条件判断提取到一个易于读取的属性或方法中。 阅读全文
摘要:Break Responsibilities:责任拆分 把一个类的多个职责进行拆分,这贯彻了单一职责原则(SRP)。尽管对于如何划分“职责”经常存在争论,但应用这项重构还是十分简单的。我这里并不会回答划分职责的问题,只是演示一个结构清晰的示例,将类划分为多个负责具体职责的类。 阅读全文
摘要:Extract Method Object:提炼方法对象 当你尝试进行提炼方法的重构时,需要引入大量的方法。在一个方法中使用众多的本地变量有时会使代码变得丑陋。因此最好使用提炼方法对象这个重构,将执行任务的逻辑分开。 阅读全文
摘要:Introduce Explaining Variable:引入解释性变量 你有一个表达式,有可能非常复杂而难以阅读。这种情况下,临时变量可以帮助你将表达式分解为比较容易管理的形式。将赋值表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式的用途。 阅读全文
摘要:Break Dependencies:打破依赖 有些单元测试需要恰当的测试“缝隙”(test seam)来模拟/隔离一些不想被测试的部分。如果你正想在代码中引入这种单元测试,那么今天介绍的重构就十分有用。在这个例子中,我们的客户端代码使用一个静态类来实现功能。但当需要单元测试时,问题就来了。我们无法在单元测试中模拟静态类。解决的方法是使用一个接口将静态类包装起来,形成一个缝隙来切断与静态类之间的依赖。 阅读全文