目前正在开发一个使用 JavaFX 2 作为框架的 GUI 应用程序。已经用过Java,知道数据绑定的原理。
由于 scala 中的函数式编程提倡使用不可变值(vals),因此存在差距。
除了为 gui 提供一个基于 fx 属性的可变表示模型和为具有转换层的应用程序逻辑提供不可变模型之外,还有其他解决方案吗?
问候,安德烈亚斯
目前正在开发一个使用 JavaFX 2 作为框架的 GUI 应用程序。已经用过Java,知道数据绑定的原理。
由于 scala 中的函数式编程提倡使用不可变值(vals),因此存在差距。
除了为 gui 提供一个基于 fx 属性的可变表示模型和为具有转换层的应用程序逻辑提供不可变模型之外,还有其他解决方案吗?
问候,安德烈亚斯
由于您的问题有点含糊,如果这主要基于个人观点,请原谅:据我所知,没有其他方法可以处理可变属性模型。但是,我会争辩说您不想要一个:
首先,至少从纯粹的角度来看,函数式编程试图避免副作用。然而,用户界面完全是为了引起副作用。从那里开始有一个轻微的哲学不匹配。
不可变数据的主要好处之一是您不必处理控制结构来避免并发修改。但是,JavaFX 的事件队列实现了一种非常严格的单线程方法,对读写访问进行了隐式控制。另一方面,用户界面组件比大多数其他编程领域更适合可变对象的想法。毕竟,节点结构是有状态组件的固有层次结构。
考虑到这一点,我认为试图在 JavaFX 上强制使用功能性和不可变的范式是行不通的。相反,我建议基于键路径选择构建一个转换层——例如,绑定一个标签以将一个(不可变的)Person 的名称显示给 Person,而不是 name 属性,并让解析器处理对 name 属性的访问。基本上,这意味着结合使用 Bindings#select 和 JavaBeanStringProperty。