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

 

编写可测试的 Presentation Model:业务逻辑

现在已经有了针对 ContactPresentationModel 期望的业务逻辑的完整测试,可以开始实现功能了。

首先,十分有必要查看一个简短类。该类包含两个属性:contactenableYearsMarriedContact 对象引用已公开,因此其他类可以根据需要通过 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 视图
测试成功后的 JUnit 视图

以一种完全可测试的不依赖 UI 的方式重写后,现在就有了与受损代码示例相同的业务逻辑。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值