快速业务通道

演化架构与紧急设计: 积累惯用模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
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() 方法的部分内容,其中有结构性重复

if (label != null) {    addParameter("label", findString(label)); } if (labelPosition != null) {    addParameter("labelposition", findString(labelPosition)); } if (requiredposition != null) {    addParameter("requiredposition", findString(requiredposition)); } if (required != null) {    addParameter("required", findValue(required, Boolean.class)); } if (disabled != null) {    addParameter("disabled", findValue(disabled, Boolean.class)); } if (tabindex != null) {    addParameter("tabindex", findString(tabindex)); } if (onclick != null) {    addParameter("onclick", findString(onclick)); } // much more code elided for space considerations

演化架构与紧急设计: 积累惯用模式(4)

时间:2011-08-18 IBM Neal Ford

该代码可作为改进的候选目标(见下一小节 改进代码,第 1 部分),但是我想再多看一下,该代码 存在的原因 是什么,为什么它包含如此多的复杂性。

放眼其他圈复杂度和传入耦合值都比较高的 组合,我发现了 WebTable,它的那两个值分别为 33 和 12。对它运行 JavaNC

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号