追求代码质量 - 用代码度量进行重构 - 编程入门网
替,如图 1 的 UML 图所示:
图 1. 提取方法模式实践 提取方法模式提供了两个关键好处: 原来的方法现在更短了,因此也更容易理解。 移走并放在自己方法中的逻辑体现在更容易测试。 追求代码质量 - 用代码度量进行重构(2)时间:2010-12-11 IBM Andrew Glover降低圈复杂度 在使用的时候,对于被高度圈复杂度值感染的方法来说,提取方法是一剂良 药。您可能会记得,圈复杂度通过度量方法的路径数量;所以,可以认为如果提 取 出其中一些路径,重构方法的整体复杂性会降低。 例如,假设在运行了像 PMD 这样的代码分析工具之后,结果报告显示其中一 个类包含的一个方法有较高的圈复杂度值,如图 2 所示: 图 2. 圈复杂度值高达 23! 在仔细查看了这个方法之后,发现这个方法过长的原因是使用了太多的条件 逻辑。正如我以前在这个系列中指出的,这会增加方法中产生缺陷的风险。谢天 谢地,updateContent() 方法还有个测试用例。即使已经认为这个方法有风险, 测试也会减轻一些 风险。 另一方面,测试已经精心地编写成可以测试 updateContent() 方法中的 23 个路径。实际上,好的规则应当是:应当编写至少 23 个测试。而且,要想编写 一个测试用例,恰好能隔离出方法中的第 18 个条件,那将是极大的挑战! 小就是美 是否真的要测试长方法中的第 18 个条件,是个判断问题。但是,如果逻辑 中包含真实的业务值,就会想到测试它,这个时候就可以看到提取方法模式的作 用了。要把风险降到最小很简单,只需把条件逻辑分解成更小的片段,然后创建 容易测试的新方法。 例如,updateContent() 方法中下面的这小段条件逻辑创建一个状态 String 。如清单 1 所示,逻辑的隔离看起来足够简单: 清单 1. 条件逻辑成熟到可以进行提取
追求代码质量 - 用代码度量进行重构(3)时间:2010-12-11 IBM Andrew Glover通过把这一小段条件逻辑提取到简洁的新方法中(如清单 2 所示),就做到 了两件事:一,把 updateContent() 方法的整体复杂性降低了 5;二,逻辑的 隔离很完整,可以容易地对它进行测试。 清单 2. 提取方法产生 getStatus
现在可以把 updateContent() 方法体中的一部分替换成对新创建的 getStatus() 方法的调用,如清单 3 所示: 清单 3. 调用 getStatus
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |