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

 

受损代码是错误代码

身为一名软件开发人员,长期以来接受的教导就是利用关注点分离很有好处。紧密耦合将导致代码不可重用,难于测试,并且不易维护。有趣的是,在开发 UI 时,所有这些教训通常都被抛到九霄云外。下面的示例就是印证这句话的最好证据。

下载 部分中下载项目。从菜单中选择 File > Import,将其导入工作区。在对话框中,选择 Existing Projects Into Workspace。在下一个屏幕中选择归档文件选项,然后浏览以选择刚下载的压缩文件。单击 Finish 将该压缩文件导入后,工作区内现在应当有了一个 databinding-tutorial2 项目。

在 MangledConcernsExample 上单击鼠标右键,然后从弹出式菜单中选择 Run As > SWT Application。将会看到一个类似图 1 所示的窗口。它提供了一个简单的启用规则用于尝试同时启用 Name、Spouse 和 Years Married 字段。如果在 Name 字段和 Spouse 字段中填入值,则 Years Married 字段将变为启用状态。删除 Name 或 Spouse 任意一个字段中的值都会导致系统清空 Years Married 字段并将其变为禁用状态。清单 1 中显示了启用此功能的代码。



图 1. UI 示例
UI 示例



清单 1. 受损的启用代码
                    
private void createControls(Composite c) {

    ...
 
    YearsMarriedEnablementListener listener = new YearsMarriedEnablementListener();
    this.nameTxt.addModifyListener(listener);
    this.spouseTxt.addModifyListener(listener);
}

private class YearsMarriedEnablementListener implements ModifyListener {

    public void modifyText(ModifyEvent e) {
        boolean enable = false;
        if ((nameTxt.getText().trim().length() > 0)
                && (spouseTxt.getText().trim().length() > 0)) {
            enable = true;
        } else {
            yearsMarriedTxt.setText("");
        }
        yearsMarriedTxt.setEnabled(enable);
    }
}

这个示例中存在很多问题。首先,请注意 YearsMarriedEnablementListener 更像是一个补救措施,而不是应用程序的战略组成部分。第二个问题是此侦听程序中的代码直接引用了 UI 控件。为了测试这段代码,将必须把整个表实例化,包括 UI 控件。使用 Presentation Model 的 UI 设计模式可以更好地构建这段代码。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值