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

标签 java algorithm user-interface gwt design-patterns

我正在帮助为客户构建 GWT 应用程序并重写了大部分内容以更好地工作、更短的代码、更快等。但是在我开发的所有 GUI 应用程序中(实际上并不多)出现一个转折点,您只需要制定很多规则并将逻辑从听众转移到一些共同的中介者。然后有时这可能会变得一团糟,因此您认为您需要在听众中做的任何小事情。

举个例子:

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

虽然一切都在运行,没有已知的错误,但有一些编码问题确实困扰着我:

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

我的方法:

  • 确定哪些字段共享一个公共(public)事务并将代码移到一个地方
  • 每个 radio 组在其 radio 之间共享一个监听器实现
  • 默认表单填写会延迟到实时数据可用(尽可能多),因此它会被多次调用
  • 每个 Action 都会调用一个通用的 validator 方法
  • validator 遍历表单中的所有字段,调用它们的 validator (突出显示所有错误)并返回一个 boolean 值
  • 每个相关的按键或鼠标操作,数据更改都会延迟到上次调用后 250 毫秒后调用;这意味着第一次调用只是将 validator 作为延迟操作放置,后续调用会重置计时器

好吧,深入研究更多细节没有任何意义,但我更沮丧的是视觉操作(启用)、数据操作(设置表单字段值)、字段监听器之间没有明确的区分,检索表单值和实时数据监听器。

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

最佳答案

与 MVC 相比,我更倾向于 MVP。这显然是 Google 打算走的路,所以采用它可能意味着您能够顺其自然,而不是对抗当前

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

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

关于java - Java/GWT 中的 GUI 模式 - 一般方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308775/

相关文章:

java - 将字符串数组值传递给 sql IN 条件

java - 线-三角形交点检查返回错误的交点

C++设置: counting elements less than a value

python - 在 python 中翻转位

python - 使用 tkinter 的简单动画

matlab - 如何获取鼠标在 Matlab 图形轴上的单击位置?

java - 何时在 Java 中使用 switch 语句

java - 什么时候为java中的静态变量分配内存?

algorithm - 特殊分选

javascript - 有哪些技术资源可用于学习如何设计漂亮的 Web 界面?