【问题标题】:Best way for a Swing GUI to communicate with domain logic?Swing GUI 与域逻辑通信的最佳方式?
【发布时间】:2010-09-09 08:30:36
【问题描述】:

我在许多 POJO 中实现了一些域逻辑。我想编写一个 Swing 用户界面,以允许用户启动并查看各种域操作的结果。

在 UI 和域之间进行通信的最佳模式/框架/库是什么?这归结为:

  • 能够将用户手势转换为域操作的 UI
  • 能够将状态/结果信息发送回 UI 以进行显示的域

我知道 MVC 是一个宽泛的概念,并且对观察者模式(如果我理解正确的话,它的 Java 实现有一些缺点)进行了修改,但我想知道对于这个问题是否有公认的最佳实践?

【问题讨论】:

    标签: java user-interface swing


    【解决方案1】:

    绝对是 MVC——像 example 这样的东西,它清楚地把事情分开了。 Swing 示例的问题在于它们似乎显示 MVC 都在 Swing 内容中工作,这对我来说似乎不正确

    【讨论】:

    • 那篇文章写得真好;我会检查一下,看看我的进展如何。
    【解决方案2】:

    MVC 非常适合单个小部件,但是当 pagesforms 带有很多小部件时,它会变得有点不守规矩。

    可能值得研究的一件事是Beans Binding Framework (JSR295

    【讨论】:

      【解决方案3】:

      我过去使用过观察者模式(使用 AspectJ 魔法)并取得了一些的成功,但发现除非你小心,否则它很快就会变成一个集群......呃......轻弹?

      很快就变得难以管理,最重要的是极难调试。

      编辑:

      为了稍微扩展我的答案,我们使用的是SWT,而不是 Swing,所以是 YMMV。我们基本上使用 AspectJ 来连接数据从 UI 组件到模型对象的传输。这些模型对象是愚蠢的 POJO。

      实际的业务逻辑是通过使用 AspectJ “观察”模型对象并在它们发生变化时触发所需的事件来完成的。因此,如果您更改了文本框中的值,AspectJ 会触发并将该值复制到 POJO 中。如果 POJO 中的该字段上有一个用于业务逻辑的事件,然后 会触发。如果该逻辑修改了任何 POJO(它可以),AspectJ 会注意到并将 POJO 中的值复制到 UI 组件中。

      【讨论】:

      • 我认为您将 POJO (en.wikipedia.org/wiki/POJO) 与 JavaBeans 混淆了。后者是愚蠢的数据存储,但前者可能确实是具有全方位行为/逻辑的丰富领域类型。 POJO 的“普通”位只是表示不依赖于任何特定的框架或技术。
      • 是的,我的错。更新帖子以反映:)
      • @Andrew Swan:我相信你的意思是前者是愚蠢的数据存储,但后者可能确实是丰富的领域类型行为/逻辑。
      猜你喜欢
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      相关资源
      最近更新 更多