演化架构与紧急设计:对设计进行重构 - 编程入门网
有框架添加额外的行为时 ,这都是主要的代码特征(code smell)。继承或复合都提供了一种更加干净的 方法来扩展框架,如果这两种方法都不可行的话,那么问题就更加严重了。
这段代码中另一个常见的复制问题在 ApplicationMap.java 和 Sorter.java 文件中。ApplicationMap.java 包含一个共 27 行的复制代码块,如清单 1 所示 : 清单 1. ApplicationMap.java 中的复制代码
除了多次使用嵌套的三元运算符外(是判断任务安全性编码的良好指标,因为 任何人都不能读取这些代码),这段复制代码的有趣之处并不在于代码本身。而 是在于在出现复制的两个方法之前显示的先兆。第一处如清单 2 所示: 清单 2. 第一次出现复制代码时的先兆
演化架构与紧急设计:对设计进行重构(4)时间:2011-05-18 IBM Neal Ford清单 3 展示了出现第二次复制时的先兆: 清单 3. 出现第二次复制代码时的先兆
在整个 while 循环中的惟一不同之处在于 清单 2 中对 context.getAttribute(key) 的调用和 清单 3 中对 context.getInitParameter(key) 的调用之间的差别。显然,这些可以实现参数 化,允许复制代码销毁自己的方法。来自 Struts 的示例解释了免费的复制和粘 帖代码,这些代码不仅毫无必要,并且容易修复。 实际上,这解释了利用并将条目添加到属性集中的方法在 Struts 代码库中是 一种惯用模式。允许将几乎相同的代码放到多个位置将隐藏一个事实,即 Struts 需要一直执行这个操作,这将阻止将这些代码放到一个含义更明显的位置。要清 理 Struts 代码库中多个类的设计,一种方法就是意识到这种惯用模式的存在并 巩固这一行为。 结构化复制 另一种复制形式更加难以检测,因此危害也更大:结构化复制。使用有限的几 种语言的开发人员(特别是那些只具备少量元编程支持的语言,比如 Java 和 C# )尤其容易出现这个问题。我的同事 Pat Farley 使用了一个短语就很好地总结 了结构化复制:相同的空白,不同的值。就是说,您复制了几乎一模一样的代 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |