Java / GWT中的GUI模式 - 一般方法

时间:2011-06-10 15:43:36

标签: java algorithm user-interface gwt design-patterns

我正在帮助为客户构建一个GWT应用程序,并重写了大部分内容以更好地工作,更短的代码,更快的等等。但是在我所做的所有GUI应用程序中(真的没那么多)有一个弯曲点,你必须放置很多规则并将逻辑从听众转移到一些普通的中介。然后有时候这会弄得一团糟,所以无论你认为自己需要在听众身上做些什么。

我们举一个例子:

  • 表格有10-20个字段
  • 两个独有的无线电控制,大约是其他领域的一半状态(启用,验证,输入限制)
  • 三个独有的无线电控制再次控制几乎相同的字段,但以不同的方式(影响计算,启用);他们也受上述
  • 的控制
  • 根据以前的选择和一些实时数据对象,动态验证4个数字字段;他们可以有上限/下限,启用/禁用
  • 一个下拉框控制接下来的6个左右控件 - 显示/隐藏它们,修改验证器
  • 一些复选框(由上面的组合显示)激活一些输入字段并确定其验证算法

虽然一切都在运行,没有已知的错误,但是有一些编码陷阱真的让我很烦恼:

  • 代码在侦听器和一些中介方法之间传播。
  • 加载带有一些预设值的表单会带来自己的挑战:比如可能有或没有的数据对象,可能改变其状态和后续字段行为的数据对象
  • 某些字段设置了默认值,这不应该被自动填充覆盖,但如果数据对象不存在(那么)那么当后者变为可用时,它们最终需要填充
  • 如果未验证任何字段,则无法提交
  • 表单

我的方法:

  • 确定哪些字段共享一个共同的空间并将代码移动到一个地方
  • 每个广播组在其无线电之间共享一个侦听器实现
  • 默认表单填写被推迟到实时数据可用(尽可能多)并因此被多次调用
  • 每个操作都调用一个通用的验证方法
  • 验证器遍历表单中的所有字段,调用其验证器(突出显示所有错误)并返回单个布尔值
  • 每个相关的按键或鼠标操作,数据更改延迟在最后一次调用后250ms被调用;这意味着第一次调用只是将验证器作为延迟动作,后续调用重置计时器

好吧,深入了解更多细节没有任何意义,但我对视觉动作(启用),数据动作(设置表单字段值),现场监听器之间没有明确分离这一事实感到更加不安,检索表单值和实时数据监听器。

确保MVC分离并使自己更好地进行维护会有什么好方法/模式(下次可能)?我知道这不是一个典型的问题,但我已经阅读了所有可以获得的文档,但仍然没有找到一些有用的答案。

2 个答案:

答案 0 :(得分:3)

我比MVC更接近MVP。这显然是谷歌打算采用的方式,因此采用它可能意味着你能够 顺其自然 而不是 对抗当前

这对您有何影响?好吧,我相信你应该接受一个更整洁的实现可能涉及更多代码:而不是你希望的“更短代码”。但是,如果它是逻辑结构化的,高效的代码,那么Google编译器应该能够在编译器优化阶段修剪出许多代码。

因此,尽可能多地将逻辑移到模型层中。彻底测试,并验证页面重置/整理的正确级别是否发生(所有这些都可以使用普通的JUnit完成,没有任何UI)。接下来,使用Presenter(Activity)将View绑定到Model:处理交互,填充字段等。

答案 1 :(得分:0)

你可以将不同类别的巨大类划分为不同的JPanel中的GUI。所有面板都在不同的类中实现,扩展了JPanel。猜猜这会对你有所帮助。