Swing GUI与域逻辑通信的最佳方法?

时间:2020-03-05 18:55:17  来源:igfitidea点击:

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

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

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

我知道MVC是一个广泛的概念,并且摆弄了Observer模式(如果我理解正确,其Java实现会有一些缺点),但是我想知道是否存在针对该问题的最佳实践?

解决方案

回答

过去,我曾经使用过Observer模式(使用AspectJ magic),但取得了一些成功,但是发现除非我们注意,否则它很快就会变成集群。

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

编辑:

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

实际的业务逻辑是通过用AspectJ"监视"模型对象并在它们发生更改时触发所需的事件来完成的。因此,如果我们在文本框中更改了值,AspectJ将触发并将该值复制到POJO中。如果POJO中的该字段上具有用于业务逻辑的事件,则该事件将触发。如果该逻辑修改了任何POJO(并且可以),AspectJ将注意到该值并将其从POJO复制到UI组件中。

回答

绝对是MVC之类的示例,它清楚地将事情分解了。 Swing示例的问题在于,它们似乎向MVC展示了所有在Swing内运行的MVC,这对我来说似乎不正确

回答

MVC非常适合单个小部件,但是当我们具有包含许多小部件的"页面"和"表单"时,它会变得有些杂乱。

Beans Binding Framework(JSR295)可能值得一看(我不认可它,我实际上没有使用过,只是为自己实现了一个非常相似的东西)。