Swing GUI与领域逻辑通信的最佳方式是什么?

7
我有一些领域逻辑实现在一些POJO中。我想编写一个Swing用户界面,以允许用户启动和查看各种领域操作的结果。
对于UI和领域之间的通信,最好的模式/框架/库是什么?这可以归结为:
- UI能够将用户手势转换为领域操作 - 领域能够向UI发送状态/结果信息以供显示
我知道MVC作为一个广泛的概念,并且已经尝试过Observer模式(如果我理解正确,其Java实现存在一些缺点),但我想知道是否有一种被接受的最佳实践来解决这个问题?
3个回答

2

绝对是MVC - 就像这个示例一样,它清晰地将事物分开。 Swing示例的问题在于它们似乎展示了MVC全在Swing中工作,这对我来说似乎不正确。


那篇文章看起来写得非常好,我会去看看并看看自己能否理解。 - Andrew Swan

1

MVC 对于单个小部件非常棒,但是当您有许多小部件的 页面表单 时,它会变得有些混乱。

有一件值得研究的事情(我不是在背书,我实际上没有使用过它,只是为自己实现了非常相似的东西),那就是 Beans Binding Framework (JSR295)。


0

我以前使用过观察者模式(使用AspectJ魔法),取得了一些成功,但发现除非你小心,否则很快就会变成一团..嗯..混乱?

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

编辑:

稍微扩展一下我的答案,我们使用的是SWT而不是Swing,所以效果因人而异。我们基本上使用AspectJ来连接从UI组件到模型对象的数据传输。这些模型对象是愚蠢的POJOs。

实际的业务逻辑是通过使用AspectJ“观察”模型对象并在其更改时触发所需事件来完成的。因此,如果您更改了文本框中的值,AspectJ将触发并将该值复制到POJO中。如果该POJO字段具有业务逻辑的事件,那么该事件将然后触发。如果该逻辑修改了任何POJOs(它可以这样做),AspectJ将注意到并将该值从POJO复制到UI组件中。


我认为您将POJO(http://en.wikipedia.org/wiki/POJO)和JavaBeans混淆了。后者是愚蠢的数据存储,但前者确实可能是具有完整行为/逻辑范围的丰富域类型。 POJO中的“plain”部分仅表示不依赖于任何特定框架或技术。 - Andrew Swan
是的,我的错。已更新帖子以反映 :) - SCdF
@Andrew Swan:我相信你的意思是前者是愚蠢的数据存储,但后者确实可能是具有完整行为/逻辑范围的丰富域类型。 - Nate W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接