我想构建一个使用 SWT/JFace 作为 UI 库的数据库应用程序。我已经习惯了手动编写 SWT 代码,并希望深入研究 JFace 的数据绑定(bind),因为我第一次使用 Window Builder Eclipse 插件时偶然发现了它。
目前我的工作重点是“添加记录”对话框,我对最佳实践感兴趣。我将一个空模型对象绑定(bind)到文本字段,并且一旦用户进行输入,模型对象属性就会更新。
此外,我更改了 open() 方法的方法签名,以在对话框处理后返回模型对象。截断:
public class AddRecordDialog extends Dialog {
private MyItem item = new MyItem();
...
public MyItem open() {
createContents();
shell.open();
shell.layout();
Display display = getParent().getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return item;
}
}
但是,如果用户取消输入(通过单击“取消”按钮或关闭对话框),这种处理结果对象的方式只会为我提供具有来自不带参数的空默认构造函数的默认属性的模型对象。
这就提出了如何确定用户采取了什么操作的最佳实践问题。我想到的一些解决方案:
是否应该引入一个额外的标志?喜欢像
cancelClicked = false
这样初始化的额外boolean
值并更改取消按钮的选择监听器上的变量吗?是否应该像在
MessageBox
类中一样为按钮指定 ID,并在打开对话框的类中引入switch
语句?必须引入添加一个额外的方法来返回最终有效的模型对象。是否有其他方法可以通知对话框调用者已取消的输入?
您可能会想,哦,他担心的是小问题而不是真正的编程问题,但由于这是我的第一个应用程序,我想在 Java/SWT 环境中严格遵守 MVC 和最佳实践,所以我确实关心。
预先感谢您阅读这个相对较长的问题;)
最佳答案
如果你真的想坚持使用 MVC,我建议稍微改变一下模型:)
class MyItemBuilder {
private bool isCanceled = false;
private MyItem item;
// includes getters/setters of MyItem, which delegate to item
public bool cancel() {
isCanceled = true;
}
public MyItem build() {
if (isCanceled)
return null;
else
return item;
}
}
public class AddRecordDialog extends Dialog {
private MyItemBuilder builder = new MyItemBuilder();
...
}
关于java - SWT - 关于检索结果/检测中止的用户输入的对话框最佳实践的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311395/