我最近花了一些时间学习和尝试使用各种Java数据绑定工具,如JGoodies、GlazedLists、JSR-295等。我一直试图解决的问题并不是那么困难,但是我为支持绑定过程而编写的代码量远远超过了它提供的任何简化。
我发现所提供的工具除了简单的组合和扩展之外没有任何用处(GlazedLists特别提供了一组很棒的工具,但是这个系统太复杂而无法扩展)。
我真的很喜欢数据绑定的想法,但是它似乎有很深的缺陷。我错过什么了吗?
我所有关于桌面模式和数据绑定的演讲都包含了对开发人员在自动数据绑定中面临的问题的强烈警告。我建议考虑使用像MVP这样的桌面模式,它非常容易使用,而且不需要绑定。
绑定的问题在于许多隐式操作;这些帮助,但很难理解,如果意外发生,只有少数开发人员可以调试和解决第三方绑定链中的问题。
但是在过去的三年里,在我参与的项目中,真正遇到问题的程序员少了。所以我倾向于说绑定不再是个大问题了
如果你的应用程序是微不足道的,那么你是否绑定或是否逐个编写侦听器都无关紧要。
如果你的应用程序已经取得了几个月的进展,在事实之后引入绑定将会带来一些痛苦。几乎所有(有用的)技术都是如此。大部分的痛苦可能来自于你以前认为理所当然的混乱。
如果你正确地使用绑定,你可能会获得gui和gui行为的完全分离。这反过来意味着
- 你可以测试你的表示模型(你绑定组件的东西)没有swing,没有EDT,只是用普通的单元测试。
- 你可以用只涉及很少Swing组件的简单测试来测试你的绑定
如果你试图在没有绑定框架的情况下达到相同的效果,你将最终编写自己的绑定框架。
在java世界中绑定有一个严重的问题。它迫使您使用PropertyChangeSupport编写getter + setter,这既繁琐又容易出错。我没有看到在Java中解决这个问题的现实方法,但是其他语言(比如Scala)在这方面提供了有趣的机会。如果你感兴趣,可以看看我上一篇博文:http://blog.schauderhaft.de/2011/05/01/binding-scala-objects-to-swing-components/