Scala,GUI和不变性

Dav*_*ank 9 user-interface scala javafx immutability scalafx

我创建了一个计算某些东西的算法.这可以被视为模型.该算法以完全功能的方式实现,因此它仅使用不可变类.现在使用这个模型,我想在它的顶部开发一个GUI层.但是我对Scala中构建GUI的最佳实践一无所知.我打算使用ScalaFX.

我的问题如下:在ScalaFX中(类似于JavaFX),您可以将GUI中的值绑定到对象属性.这显然违反了功能范例,但似乎非常方便.这将需要重写我的类以使用可绑定的属性,这可能感觉像是摇尾巴的尾巴 - 模型将取决于GUI.

另一方面,我可以有一个独立的GUI层.在这种情况下,我需要代理对象来绑定,我将不得不基于这些代理对象创建我的模型对象.这会更加惯用,但意味着大量的代码重复和额外的工作.我的模型和代理对象必须保持同步,我将不得不处理复制属性.

这样做的好方法是什么?GUI总是充满了可变性,因此功能编程在这里感觉不到.不过我喜欢Scala,所以我也想继续使用它作为GUI.

0__*_*0__ 5

尽管付出了额外的努力,但采取第二种方法.为每个模型创建小的可变"视图"实例.将视图绑定到窗口小部件,并根据模型中的更改安装更新视图代理的观察器或挂钩.不要让GUI API规定您的并发方法和模型应该是什么样子.

我相信有一些开源库可以为普通的Scala-Swing或Scala-FX提供更多功能和/或反应的抽象层.