Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(6/19)
2008-08-28 18:22
441 查看
编写可测试的 Presentation Model:业务逻辑
现在已经有了针对
首先,十分有必要查看一个简短类。该类包含两个属性:
现在可以修改
清单 4. 支持属性更改的启用状态 setter
接下来,需要重写受损示例的
清单 5. 在 Presentation Model 中实现业务逻辑的新属性更改侦听程序
最后,
清单 6. 向联系人的字段中添加侦听程序
如果在
图 5. 测试成功后的 JUnit 视图
![](https://www6.software.ibm.com/developerworks/cn/education/opensource/os-ecl-jfacedb3/figure5.jpg)
以一种完全可测试的不依赖 UI 的方式重写后,现在就有了与受损代码示例相同的业务逻辑。
现在已经有了针对
ContactPresentationModel期望的业务逻辑的完整测试,可以开始实现功能了。
首先,十分有必要查看一个简短类。该类包含两个属性:
contact和
enableYearsMarried。
Contact对象引用已公开,因此其他类可以根据需要通过 Presentation Model 来访问该对象。将
enableYearsMarried属性而不是
Contact对象添加到 Presentation Model 中,因为更改对象的状态和业务逻辑都是绑定到
Contact编辑操作而不是对象本身。
现在可以修改
ContactPresentationModel来实现测试中指定的约定。在 Eclipse Java 编辑器中打开类。需要的第一处更改是实现对
enableYearsMarried属性的属性更改支持,以供将来与 JFace 数据绑定结合使用。这个更改可以通过将其 setter 更改为匹配清单 4 中所示的代码来完成。
清单 4. 支持属性更改的启用状态 setter
public void setEnableYearsMarried(boolean enableYearsMarried) { boolean oldVal = this.enableYearsMarried; this.enableYearsMarried = enableYearsMarried; firePropertyChange("enableYearsMarried", / oldVal, this.enableYearsMarried); } |
ModifyListener中的逻辑,使其对
Contact对象进行操作,而不是直接对 UI 的小部件进行操作。清单 5 中显示了这个新的属性更改侦听程序。
清单 5. 在 Presentation Model 中实现业务逻辑的新属性更改侦听程序
private class EnablementPropertyChangeListener implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent evt) { boolean enable = false; if ((getContact().getName() != null && getContact().getName().trim().length() > 0) && (getContact().getSpouse() != null && getContact().getSpouse().trim().length() > 0)) { enable = true; } else { getContact().setYearsMarried(null); } setEnableYearsMarried(enable); } } |
ContactPresentationModel的构造函数需要将这个新侦听程序与
Contact的名称属性和配偶属性绑定起来,如清单 6 所示。
清单 6. 向联系人的字段中添加侦听程序
EnablementPropertyChangeListener enablementPropertyChangeListener = new EnablementPropertyChangeListener(); this.contact.addPropertyChangeListener("name", enablementPropertyChangeListener); this.contact.addPropertyChangeListener("spouse", enablementPropertyChangeListener); |
ContactPresentationModel测试上单击鼠标右键并将它作为一个 JUnit 测试来运行,则会看到令人满意的 JUnit 成功绿栏,如图 5 所示。
图 5. 测试成功后的 JUnit 视图
![](https://www6.software.ibm.com/developerworks/cn/education/opensource/os-ecl-jfacedb3/figure5.jpg)
以一种完全可测试的不依赖 UI 的方式重写后,现在就有了与受损代码示例相同的业务逻辑。
相关文章推荐
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(8/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(1/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(9/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(2/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(14/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(3/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(15/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(4/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(16/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(5/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(7/19)
- 了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点
- 了解 Eclipse 中的 JFace 数据绑定,第 2 部分: 绑定的基础知识
- 使用C1TrueDBGrid表格控件实现数据绑定、分组和过滤功能
- 使用 Eclipse 在 Google App Engine 上创建 mashup,第 3 部分: 使用 RESTful Web 服务
- jface databinding:使用CheckboxTableViewer实现表中(Set)对象与CheckTable中选中条目数据绑定
- 基于Netty5.0高级案例二之WebSocket中关于使用ProtoBuf传输数据介绍js部分
- 在 Eclipse Workbench 之外使用 Eclipse GUI,第 1 部分: 单独使用 JFace 和 SWT
- 在 Eclipse Workbench 之外使用 Eclipse GUI,第 2 部分: 使用 JFace 图像注册表
- 使用 Google Web Toolkit、Apache Derby 和 Eclipse 构建 Ajax 应用程序,第 3 部分: 通信