当前位置: 首页 > 知识库问答 >
问题:

JavaFX8:模型/域与视图的分离

关翰
2023-03-14
TableColumn<Person, String> firstNameCol = 
            new TableColumn<Person, String>("First Name");
firstNameCol.setCellValueFactory(
            new PropertyValueFactory<Person, String>("firstName"));

但是,Person是我所说的“域”类--我的模型可以自由引用和使用的东西。我不希望我的域和模型层知道/依赖于这样一个事实,即应用程序是使用JavaFX显示的。

我认为模型/域在这方面应该保持纯净,这是对的吗?如果是这样,使用JavaFX最好的方法是什么?例如,我是否应该以某种方式为我的域对象编写适配器类,以便用ObservableValues来表示它们?

共有1个答案

拓拔浩阔
2023-03-14

保持您的域模型纯净无疑是明智的,不要将其绑定到任何特定的框架上,因为您可能需要在其他上下文中使用这些对象(数据库存储、在REST API中公开它们、进行批处理等)。

更改域模型以使用JavaFX属性会给那些类增加许多额外的负担,而这些负担在其他场景中需要避免。

然而,JavaFX确实有处理这种情况的标准方法,因此您可以轻松地将域模型连接到它的控件,并且它以您已经建议的方式工作,使用其JavaFX.beans.property.adapter包中的适配器。

但是,使用这些适配器不会像使用SimpleStringProperty那样使控件响应域对象中值的变化。

这将取决于您的需求,如果这是一个问题,但您可以考虑修改您的域模型对象,以添加PropertyChangeListener支持。这是一个相对较轻的重量变化(相对于完整的JavaFX属性),并且不会使您依赖JavaFX(仅依赖java.beans,这问题较小)。

有关如何直接在JavaFX中使用域模型类的详细说明,请参阅以下答案:使用JavaFX属性的JavaBean包装

 类似资料:
  • 在这个话题上有数百个类似的问题。但我仍然感到困惑,我希望得到专家的建议。 我们正在使用ASP开发一个应用程序。NETMVC4和EF5以及我们的是DB优先的方法。 我们在一个单独的项目中有数据层,该项目是一个类库,包含其中定义的所有实体。然后是用所有存储库和域模型定义的业务层(这是正确使用的术语)。然后是表示层。 目前我们还没有定义任何视图模型,我们使用的是与视图模型相同的BL域模型。在这种方法中,

  • 8.4.2 模型与视图 复杂应用程序经常可以分解成两个部分:核心逻辑和用户界面。程序的核心逻辑部分称 为模型(model),它负责为应用问题建模,管理应用问题的数据和行为,并对来自用户界面 的数据请求或数据更新指令进行响应。程序的用户界面部分称为视图(view),它负责显示模 型的当前数据状态,响应用户的交互动作。模型和视图是相互独立的,可以分开设计和测试, 从而简化程序结构、降低设计难度,这称为

  • 本文向大家介绍wpf 视图模型,包括了wpf 视图模型的使用技巧和注意事项,需要的朋友参考一下 示例 视图模型是MV VM中的“ VM” 。这是一个充当中介的类,将暴露model(s)给用户界面(视图),并处理来自视图的请求,例如单击按钮引发的命令。这是一个基本的视图模型: 构造函数创建一个Customer模型对象,并将其分配给CustomerToEdit属性,以使视图可见。 构造函数还创建一个R

  • CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。在实践中,由于这种分离 所以你的页面中只包含很少的 PHP 脚本。 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一

  • 我有一个这样的视图集来列出用户的数据: 我想打开分页,就像模型视图集的默认分页一样: 官方文档说: 只有在使用通用视图或视图集时,分页才会自动执行 …但我的结果集根本没有分页。如何为其分页?

  • 我有Gammer模型,即用户扩展和竞争模型。很多用户可以参加一场比赛,而一场比赛可以有很多用户(很多) 插件管理。py: 管理员可以查看球员比赛(用户)或为他们分配能力 现在我希望玩家(用户)可以注册比赛(选择比赛)。我如何继续?