我正在帮助为客户构建 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/