我正在尝试研究 JavaFX,因为我想将它用作我程序的 GUI。我的问题本质上是一个概念性的问题:
迄今为止,我的程序主要是 MVC 模式的“模型”部分;也就是说,几乎我所有的代码都是类意义上的抽象的 OO 表示,并且所有这些代码都是逻辑代码。
由于我不想成为我程序的唯一用户,我想添加 MVC 的“ View ”部分,以便人们可以轻松地使用和操作我的程序的“模型”部分。为此,我想使用 JavaFX。
在我的“模型”类中,我显然使用了 Java 集合 API 中的各种列表、映射和其他类。为了让我的程序的用户操作这些底层列表和映射,我想使用 JavaFX 中的 Observable(List/Map) 接口(interface)。
一个使情况变得清晰的具体示例:
假设我有一个 MachineMonitor 类,每 3 分钟检查一次 Machine 的某些属性,例如连接是否仍然良好,齿轮转动的速度等。如果遇到某些不等式(例如齿轮已下降到 1 转/秒的速度)MachineMonitor 触发 RestartMachineEvent。
目前我使用 ArrayList
这样我就可以跟踪我的程序的用户想要做什么(例如,为 Machine #5 创建一个 MachineMonitor 来检查齿轮的转数/秒是否低于 0.5)我使用 ObservableList
链接我的程序的“模型”和“ View ”的最简单方法就是将“模型”类更改为 ObservableList
一种天真的方法是为 TableView 使用 ObservableList
鉴于此,解决这个难题的最佳方法是为 ObservableList
这种临时解决方案看起来非常困惑且不理想。
我的问题是:在这种情况下,在“模型”和“ View ”之间保持几乎完全分离的最佳方法是什么?
最佳答案
我不同意使用 ObservableList
在您的“模型”类中违反了 MVC 分离。安 ObservableList
纯粹是数据表示;它是模型的一部分,而不是 View 的一部分。我 ( and others ) use JavaFX properties and collections in model representations in all tiers of my applications .在那里,我指出了我如何使用绑定(bind)到(或至少可以)绑定(bind)到 JSF 的 JavaFX 属性。 (我应该提到,并不是每个人都同意在服务器端使用 FX 属性的方法;但是我真的看不出有任何方法可以证明它们在某种程度上是 View 的一部分。)
另外,如果你这样做
List<MachineMonitor> myNonObservableList = ... ;
ObservableList<MachineMonitor> myObservableList = FXCollections.observableList(myNonObservableList);
myObservableList.add(new MachineMonitor());
可观察列表由不可观察列表支持,因此更改发生在 myNonObservableList
也。因此,如果您愿意,可以使用这种方法。
关于java - 在 JavaFX 中使用 ObservableList 是否违背了模型- View - Controller 分离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23643898/