演化架构与紧急设计: 积累惯用模式 - 编程入门网
ruts 代码库上的这 些数字。
演化架构与紧急设计: 积累惯用模式(2)时间:2011-08-18 IBM Neal Ford对 Struts 2 代码库计算这两个指标可得到图 1 所示的表,其中只显示关心的两个指标: 图 1. ckjm 指标结果表 图 2 显示相同的表,按 Weight Methods per Class(WMC)排序: 图 2. ckjm 指标,按 WMC 排序 单看这个结果,可以认为 DoubleListUIBean 类是 Struts 代码库中最复杂的类。这意味着可以将这 个类作为重构的候选目标,试着减少一些复杂性,并看看是否能发现可抽象的、重复的模式。然而,WMC 数字并不能告诉您是否值得花时间重构这个类,以改进设计。注意这个类的 Ca(传入耦合)指标,它的 值为 3。这意味着只有 3 个其他的类使用这个类。花费大量的时间改进这个类的设计也许并不值得。 图 3 显示相同的 CKJM 结果,这一次按 Ca 排序: 图 3. ckjm 结果,按 Ca(传入耦合)排序 演化架构与紧急设计: 积累惯用模式(3)时间:2011-08-18 IBM Neal Ford这个组合的视图表明,Struts 中最常用的类是 Component(这并不奇怪,因为 Struts 是一个 Web 框架)。虽然 Component 不如 DoubleListUIBean 复杂,但是有 177 个其他的类使用它,因此很适合作 为改进设计的目标。使 Component 的设计变得更好,可以在很多其他的类上取得良好的连锁反应。 通过 图 3 所示的视图,可以逐个查看复杂度和引用次数。要发现有设计挑战的类,可以看看两个数 字都比较高的组合(即被很多其他类使用的复杂的类)。我首先选择的用于研究的类是 UIBean 类,它的 圈复杂度是 53,传入耦合是 22。这是一个被很多其他类使用的复杂的类,所以我将对它作进一步的研究 。 ckjm 报告的圈复杂度数字表示这个类中所有方法的复杂度之和。我想确定是什么使这个类如此复杂, 所以需要各个方法的复杂度数字。对这个类运行开源圈复杂度工具 JavaNCSS,可得到图 4 所示的结果: 图 4. UIBean 类中各个方法的复杂度数字 到目前为止,最复杂的方法是 evaluateParams(),其复杂度为 43(也是代码行数最多的)。该方法 显然是用于处理常见的作为请求的一部分传递给 Struts 控制器的额外参数,将参数类型发送到实际的 Struts 类和组件。该代码中存在很多结构性重复,如清单 1 所示: 清单 1. evaluateParams() 方法的部分内容,其中有结构性重复
演化架构与紧急设计: 积累惯用模式(4)时间:2011-08-18 IBM Neal Ford该代码可作为改进的候选目标(见下一小节 改进代码,第 1 部分),但是我想再多看一下,该代码 存在的原因 是什么,为什么它包含如此多的复杂性。 放眼其他圈复杂度和传入耦合值都比较高的 组合,我发现了 WebTable,它的那两个值分别为 33 和 12。对它运行 JavaNC |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |