我在许多 POJO 中实现了一些域逻辑。我想编写一个 Swing 用户界面,以允许用户启动并查看各种域操作的结果。
UI 和域之间通信的最佳模式/框架/库是什么?这归结为:
- 能够将用户手势转换为域操作的 UI
- 域能够将状态/结果信息发送回 UI 以进行显示
我知道 MVC 是一个广泛的概念,并且已经摆弄了观察者模式(如果我理解正确的话,它的 Java 实现有一些缺点),但我想知道这个问题是否有公认的最佳实践?
我在许多 POJO 中实现了一些域逻辑。我想编写一个 Swing 用户界面,以允许用户启动并查看各种域操作的结果。
UI 和域之间通信的最佳模式/框架/库是什么?这归结为:
我知道 MVC 是一个广泛的概念,并且已经摆弄了观察者模式(如果我理解正确的话,它的 Java 实现有一些缺点),但我想知道这个问题是否有公认的最佳实践?
绝对是 MVC——就像这个例子一样,它清楚地把事情分开了。Swing 示例的问题在于,它们似乎显示 MVC 都在 Swing 内容中工作,这对我来说似乎不正确
MVCpages
对于单个小部件来说非常棒,但是当你拥有forms
大量小部件时它会变得有点不守规矩。
可能值得研究的一件事(我不认可它,我实际上并没有使用它,只是为我自己实现了非常相似的东西)是Beans Binding Framework (JSR295 )
我过去曾使用过观察者模式(使用 AspectJ 魔法)并取得了一些成功,但发现除非你小心,否则它很快就会变成一个集群......呃......轻弹?
它很快变得难以管理,最重要的是极难调试。
编辑:
为了稍微扩展我的答案,我们使用的是SWT,而不是 Swing,所以是 YMMV。我们基本上使用 AspectJ 来连接数据从 UI 组件到模型对象的传输。这些模型对象是愚蠢的 POJO。
实际的业务逻辑是通过使用 AspectJ '观察'模型对象并在它们发生变化时触发所需的事件来完成的。因此,如果您更改了文本框中的值,AspectJ 会触发并将该值复制到 POJO 中。如果 POJO 中的该字段上有一个用于业务逻辑的事件,则该事件将触发。如果该逻辑修改了任何 POJO(它可以),AspectJ 会注意到并将 POJO 中的值复制到 UI 组件中。