9

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

我的问题如下:在 ScalaFX(类似于 JavaFX)中,您可以将 GUI 中的值绑定到对象属性。这显然违反了函数范式,但看起来很方便。这将需要重写我的类以使用可绑定的属性,这感觉就像摇尾巴一样——模型将取决于 GUI。

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

这样做的好方法是什么?GUI 总是充满了可变性,所以函数式编程在这里并不合适。尽管如此,我还是喜欢 Scala,所以我也想继续将它用于 GUI。

4

1 回答 1

5

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

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

于 2014-11-16T22:28:51.343 回答