Java中的UI数据绑定是否值得麻烦?

14

我最近花费了一些时间学习和尝试使用各种Java数据绑定工具,例如JGoodies、GlazedLists、JSR-295等。 我尝试解决的问题并不是非常困难,但是我必须编写大量支持绑定过程的代码,这远远超过了它提供的简化。

我发现所提供的工具除了微小的组合和扩展外,无法胜任其他任务(特别是GlazedLists提供了很棒的工具集,但太过复杂而难以扩展)。

我真的很喜欢数据绑定的想法,但是目前它似乎存在严重缺陷。我有什么遗漏吗?


这确实是一个有趣的话题,但在我看来并不是一个可以回答的问题 :-) 我曾经使用并喜欢JGoodies(它的状态如何,最近有什么进展?)和jsr-295(曾经很有前途,但已经被放弃多年了),两者都非常擅长降低绑定UI元素的感知复杂性。不会将GlazedLists归入那个联盟,因为它并不是真正意义上的绑定。看到你的评估“我必须为xx绑定支持编写的代码量远远超过了任何简化”,那么我的第一反应是:那么你的上下文太琐碎了,无法从任何绑定框架中受益;-) 仅供参考 - kleopatra
kleopatra: 在Java社区中,对于这些规范和方法一直存在着巨大的脱节。J2EE也是如此。 timpatt: 这些规范涉及组件化开发,并需要工具支持。你认为VisualStudio是如何工作的呢? - alphazero
@alphazero他只提到了一个规范。它不需要工具支持(尽管拥有一些可能会很好)。它的主要问题是:它已经死了。JGoodies表现良好(但不是一个规范)。 - Jens Schauder
@jens:“我非常喜欢数据绑定的想法,但是它似乎存在严重缺陷。我错过了什么吗?” 我在这里回答了他的问题,并在我的答案中解释了为什么需要数据绑定。 - alphazero
2个回答

6

我所有有关桌面模式和数据绑定的演示都包含有关自动数据绑定给开发人员带来的问题的强烈警告。我建议考虑使用一个相当易于使用且不需要绑定的桌面模式,如MVP。

而绑定操作的问题在于存在许多隐含操作;这些操作有所帮助,但如果出现意外情况,则很难理解,只有少数开发人员可以调试和解决第三方绑定链中的问题。

然而,在过去的三年中,我工作中的项目中遇到问题的程序员较少。因此,我倾向于认为,绑定不再是一个大问题了。


4
如果您的应用程序很简单,那么绑定或逐个编写监听器都无关紧要。但是,如果您的应用程序已经进行了一些月的进展,事后引入绑定将会带来一些痛苦。对于几乎所有(有用的)技术来说,情况都是如此。大量的痛苦可能来自您之前认为理所当然的混乱。
如果您正确使用绑定,您可能会完全分离GUI和GUI行为。这反过来意味着:
- 您可以在没有Swing、没有EDT,只使用普通单元测试来测试您的演示模型(您将组件绑定到其中的内容)。 - 您可以使用涉及非常少Swing组件的简单测试来测试您的绑定。
如果您尝试在没有绑定框架的情况下实现相同的效果,您最终会编写自己的绑定框架。

我认为在Java世界中绑定存在一个严重的问题。它强制你使用PropertyChangeSupport编写getter和setter,这是繁琐且容易出错的。我不认为在Java中有一个现实的解决方法,但其他语言(如Scala)在这方面提供了有趣的机会。如果您感兴趣,请查看我的最新博客文章:http://blog.schauderhaft.de/2011/05/01/binding-scala-objects-to-swing-components/


你提到了我之前没有表达清楚的一点,那就是演示模型的概念(以及它在特定单元测试UI逻辑方面的优越性)是我开始研究绑定框架的原因。我认为你对于问题出在Java上的看法是正确的。我正在考虑将绑定代码迁移到更具表现力的语言(比如Groovy)... - timpatt
1
请查看http://code.google.com/p/client-objects/,它可以在运行时为您执行PropertyChangeSupport。 - Tim Sparg

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