您的位置:首页 > 编程语言 > Java开发

Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(6/19)

2008-08-28 18:22 441 查看
编写可测试的 Presentation Model:业务逻辑

现在已经有了针对
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 视图



以一种完全可测试的不依赖 UI 的方式重写后,现在就有了与受损代码示例相同的业务逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐