练习 1.4:解决结构问题
本练习假设您已经完成了练习 1.1:导入要求的资源。在练习 1.4 中您将先读到一个用户场景。然后,您就担当用户场景中描述的软件设计人员的角色,并使用您在练习1.1 中导入的项目来完成练习。
用户场景
要检查代码明确寻找循环依赖关系,设计人员就要运行仅查找此类依赖关系的结构分析代码复审。代码复审确实找到一些循环依赖关系,设计人员也注意到它们中的一些有快速修订。快速修订是提供用来修复常见发现结果的自动方法。为重构代码去除循环,设计人员会将快速修订应用于一个循环依赖关系。
在最后的练习中,设计人员运行代码复审并修正一个发现结果。
练习
在本练习中,您执行以下任务:
- 运行代码复审来查找循环依赖关系。
- 找出循环依赖关系何时有提供的快速修订。
- 应用快速修订来解决循环依赖关系:
- 看到一列要作出的更改。
- 查看每个更改现有的和重构后的代码。
- 收到快速修订已经应用的确认。
选择代码复审来查找循环依赖关系
要选择查找循环依赖关系的代码复审:
- 在“代码复审”视图的工具栏上,单击管理规则图标,
。

- 在选择代码复审列表中,单击结构分析代码复审。
- 展开结构分析文件夹,并清除除循环依赖关系子文件夹之外的所有内容。
- 展开循环依赖关系子文件夹,来查看将在代码复审中应用的规则,如以下屏幕捕捉所示。单击确定。

选择要复审的代码库
要选择工作区作为要复审的代码库:
- 在“代码复审”视图的工具栏上,单击复审图标(
)> 复审工作区。
运行代码复审
一旦选择了要复审的代码库,代码复审就开始运行。您可以通过检查视图右下角的进度条,来跟踪代码复审的状态。
查看找到的循环依赖关系列表
代码复审找到四个循环依赖关系,如下一个屏幕捕捉所示。循环依赖关系是应该避免的不受欢迎的反模式。在循环依赖关系中,一组对象互相连接得非常紧密,这样对任何对象作出的更改都可能会影响所有其它对象。

- 展开结构分析:循环依赖关系文件夹,并注意其中的以下发现结果,如下一个屏幕捕捉所示:

- 每个循环依赖关系都被指定有最高的问题严重性级别(
)。
- 两个循环依赖关系有快速修订(
)来去除依赖关系。
- 右键单击列表中的第三个发现结果。快速修订弹出菜单选项因解决方案而异。对于您选择的循环依赖关系,修订是将静态字段从基类移动到另一个类,从而去除循环依赖关系。
- 单击快速修订:将静态字段从基类移去。

应用快速修订
对于您选择的循环依赖关系,快速修订是将静态字段从基类移动到另一个类。您可以选择将字段移动到现有的类或新的类。
要将字段移动到新类:
- 在下一个屏幕捕捉中,查看关于您要更正的循环依赖关系(也称为对象缠结)的只读信息:
- 成为对象缠结一部分的类
- 对象缠结中类之间的依赖关系
- 单击生成新的 Java 类并输入:
- src/ 作为源文件夹名称
- com.ibm.r2a.rules.rsa.examples 作为包名称
- Defaults 作为类名

- 单击预览来查看快速修订将更改的代码。
- 展开要执行的更改列表(如以下屏幕捕捉所示),查看快速修订在将静态字段移动到新的类时,确切地将对代码作出什么更改。

- 单击列表中的第四个更改(即以 Font.java 开头的更改),查看代码的并排视图。原始代码在左边,将由快速修订创建的重构后代码在右边。

- 单击确定,将快速修订应用于列表中所有选中的更改。
- 应用快速修订后,您将看到一个确认选中标记,从而知道问题已经得到解决。

您已经完成“练习 1.4:解决结构问题”。
利用快速修订的能力
代码复审中的一些常见发现结果提供有快速修订。通过应用提供的快速修订,您就有了解决循环依赖关系的自动方法。您可以:
- 找到并评估循环依赖关系。
- 使用自动的快速修订,快速去除依赖关系。
- 看到快速修订确切地将对代码作出一列什么更改。
- 每次都一致地更正循环依赖关系。
练习 1.4 总结
您已经完成“练习 1.4:解决结构问题”。其中您执行了以下任务:
- 运行了代码复审来查找循环依赖关系。
- 找出了循环依赖关系何时有提供的快速修订。
- 应用了快速修订来解决循环依赖关系:
- 看到了一列要作出的更改。
- 查看了每个更改现有的和重构后的代码。
- 收到了快速修订已经应用的确认。
复习摘要中的学习目标,完成教程。