Scala、GUI和不变性
我创建了一个计算某些事情的算法。这可以看作是一个模型。该算法是以全功能方式实现的,因此它只使用不可变类。 现在使用这个模型,我想在上面开发一个GUI层。然而,我对在Scala中构建GUI的最佳实践一无所知。我打算使用ScalaFX 我的问题如下:在ScalaFX(类似于JavaFX)中,可以将GUI中的值绑定到对象属性。这显然违反了功能范式,但似乎非常方便。 这将需要重写我的类,以使用可绑定属性,这就像尾巴摇狗一样——模型将依赖于GUI 另一方面,我可以有一个独立的GUI层。在这种情况下,我需要绑定到代理对象,并且必须基于这些代理对象创建模型对象。这会让人感觉更习惯,但也意味着大量的代码重复和额外的工作。我的模型和代理对象必须保持同步,并且我必须负责复制属性Scala、GUI和不变性,scala,user-interface,javafx,immutability,scalafx,Scala,User Interface,Javafx,Immutability,Scalafx,我创建了一个计算某些事情的算法。这可以看作是一个模型。该算法是以全功能方式实现的,因此它只使用不可变类。 现在使用这个模型,我想在上面开发一个GUI层。然而,我对在Scala中构建GUI的最佳实践一无所知。我打算使用ScalaFX 我的问题如下:在ScalaFX(类似于JavaFX)中,可以将GUI中的值绑定到对象属性。这显然违反了功能范式,但似乎非常方便。 这将需要重写我的类,以使用可绑定属性,这就像尾巴摇狗一样——模型将依赖于GUI 另一方面,我可以有一个独立的GUI层。在这种情况下,我需要
这样做的好方法是什么?GUI总是充满了易变性,因此函数式编程在这里感觉不太好。尽管如此,我还是喜欢Scala,所以我也希望继续在GUI中使用它。尽管付出了额外的努力,还是采用第二种方法。为每个模型创建小的可变“视图”实例。将视图绑定到小部件,并安装观察器或挂钩,根据模型中的更改更新视图代理。不要让GUI API规定您的并发方法和模型应该是什么样子
我相信有一些开源库为普通的Scala Swing或Scala FX提供了更具功能性和/或反应性的抽象层。“GUI总是充满了易变性,因此函数式编程在这里并不合适。”。用正确的方式斜视它,它就不那么易变了: