gpt4 book ai didi

java - 普通对象变量还是JavaFX对象属性?

转载 作者:行者123 更新时间:2023-12-02 19:00:39 25 4
gpt4 key购买 nike

我正在开发一个 JavaFX 应用程序并尝试遵循模型- View - Controller 模式。我已经用普通的 java 对象( double 、整数、字符串...)实现了模型,认为我会在非 JavaFX 项目中重用该模型。然而,我发现在没有属性的情况下,当模型发生变化时,很难使 View 自动更新。在将每个变量更改为属性之前,我想问一下仅使用 JavaFX 属性来实现模型是否正确。

最佳答案

当我们从 Swing 切换到 JavaFX 时,我帮助公司设计和(重新)架构了一个大型 Java GUI 应用程序。我们预先做出的基本决定之一是大规模采用 JavaFX 属性。我们在所有模型代码中都使用了它们,甚至在与 GUI 没有任何联系的后端代码中也是如此。

非常重要:这与将我们的模型设计为单线程密切相关。特别是,所有模型更新都必须在 JavaFX 线程上完成。这个想法受到了很大的阻力,因为我们以前的应用程序是高度多线程的,人们不愿意放弃这一点。长话短说,我们将所有 I/O 和计算都切换为非阻塞。虽然工作量很大,但最终还是成功了。事实证明,如果你从不阻塞,单个线程可以完成很多工作。这个决定几乎单枪匹马地消除了我们所有的竞争条件和其他多线程错误,这在我的书中是一个巨大的胜利。

使用 JavaFX 属性是一个伟大的决定,我衷心推荐它。在代码风格方面,我们看到了很多优点:很容易监听属性更改,很容易添加动态更新其他属性的 react 性代码,很容易注册函数式绑定(bind),可以让我们使用像 map< 这样的习惯用法reduce 贯穿我们的代码。

唯一真正风格的缺点是添加了大量样板。声明一个新属性基本上需要 4-6 行代码。您需要属性变量、一个 getter、一个 setter 和一个底层属性对象的 getter。为了节省垂直空间,我坚持将这些项目压缩为每行,并将它们放在一起而不是分散在整个源文件中。例如:

/** User's first and last name. */
private final StringProperty nameProperty = new StringProperty("name");
public ReadOnlyStringProperty nameProperty() { return nameProperty; }
public String getName() { return nameProperty.get(); }
private void setName(String name) { nameProperty.set(name); }

关于java - 普通对象变量还是JavaFX对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65624595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com