WEB开发网
开发学院软件开发Java 演化架构与紧急设计: 积累惯用模式 阅读

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

 2010-01-20 00:00:00 来源:WEB开发网   
核心提示: 清单 2 中的 handleDefaultParameters() 方法将原有的重复结构封装到一条 if 语句中,它接收一个指定 Struts 参数名的参数,演化架构与紧急设计: 积累惯用模式(7),并通过编程方式使用反射获取适当的字段,然后,这不是一篇文章所能详述的,但是可以看到,它对原始代码

清单 2 中的 handleDefaultParameters() 方法将原有的重复结构封装到一条 if 语句中。它接收一个指定 Struts 参数名的参数,并通过编程方式使用反射获取适当的字段。然后,它对原始代码进行 null 检查,最终调用 Struts addParameter() 方法。

有了 handleDefaultParameters 方法后,就可以大大减少原有代码的行数(以及圈复杂度)。我为所有适用的 Struts 参数名创建一个 String 数组,然后迭代那个数组,在每次迭代中调用 handleDefaultParameters() 方法。

将所有参数检查合并到一个简洁的地方,这不仅仅是消减了方法的大小。原始的方法的圈复杂度是 43。之前每个 if 块占用 3 行代码(并贡献了 1 个点的圈复杂度)。我用一个含 9 行代码的方法(圈复杂度为 4)消除了重复,减少了 66 行代码(22 个参数,每个参数需要 3 行代码)。这意味着这个简单的改变使这个类因这个新方法而减少了 57 行代码,并使圈复杂度减少 18 个点(1 个 CC 点 x 22 个参数 - 4 个 CC 点)。因为那样小的一个改变,我大大改善了应用程序的可读性、指标、大小和可维护性。如果将来需要改变调用 Struts addParameter() 方法的方式,只需在一个地方做出更改。

这是一个短期的修复,这是为了演示简单的改变如何对代码的简洁度产生深远的影响。但是,如果是我的代码库,我会采用一个长期的解决方案。

改进代码,第 2 部分

如果是我的项目,我会将整个参数处理机制抽象到它自己的一组类中,构建 Struts 中的一个子框架。处理参数的代码的复杂性,以及它的广泛性和数量,意味着应该将它当做 Struts 中的一等公民。这不是一篇文章所能详述的,但是可以看到,Struts 中有大量的复杂性是围绕这个问题产生的。

上一页  2 3 4 5 6 7 8  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接