演化架构与紧急设计: 积累惯用模式
2010-01-20 00:00:00 来源:WEB开发网该代码可作为改进的候选目标(见下一小节 改进代码,第 1 部分),但是我想再多看一下,该代码存在的原因 是什么,为什么它包含如此多的复杂性。
放眼其他圈复杂度和传入耦合值都比较高的组合,我发现了 WebTable,它的那两个值分别为 33 和 12。 对它运行 JavaNCSS,可以肯定我的怀疑:它的第二复杂的方法是 evaluateExtraParams()。在这里我看到一个模式!看到这个重复的复杂元素出现在很多不同的类中,我怀疑有很多偶然的与参数有关的复杂性,所以我做一个实验。通过使用一点 UNIX® 命令行魔术,我观察 Struts 中有多少类中包含名为 evaluateParams() 或 evaluateExtraParams() 的方法:
find . -name "*.java" | xargs grep -l "void evaluate.*Params" > pbcopy
这个命令查找当前目录以下的所有 Java™ 源文件,对于每个找到的文件,它在文件中搜索以 evaluate 开头,以 Params 结尾的方法定义。最后的重定向(>)将结果文件粘贴到剪贴板上(至少在 Mac 上是如此)。当我粘贴结果时,看到了令我惊讶的事:
AbstractRemoteCallUIBean.java
Anchor.java
Autocompleter.java
Checkbox.java
ComboBox.java
DateTimePicker.java
Div.java
DoubleListUIBean.java
DoubleSelect.java
File.java
Form.java
FormButton.java
Head.java
InputTransferSelect.java
Label.java
ListUIBean.java
OptionTransferSelect.java
Password.java
Reset.java
Select.java
Submit.java
TabbedPanel.java
table/WebTable.java
TextArea.java
TextField.java
Token.java
Tree.java
UIBean.java
UpDownSelect.java
更多精彩
赞助商链接