MVC with javaFX

我正在使用javaFX的MVC概念上苦苦挣扎。我正在使用fxml文件构建一个javaFX应用程序。

每个fxml文件都有一个分配的控制器,但我不认为这个控制器是MVC模式所说的控制器。我认为它就像某种ViewController,它包含对fxml对象(按钮,窗格等)的引用。

我的问题是:这个“视图控制器”和真正的“控制器”之间的区别究竟在哪里。什么对象应该做什么事情?例如,我在哪里设置操作Listener?


答案 1

更新 2022

关于这个主题最好的文章是Eden Coding的:

最好的StackOverflow答案是:

许多年前的原始答案如下。其中的一些信息仍然相关。某些链接和引用的框架不再可用或不再受支持。但是,您不需要 JavaFX 核心功能之外的框架来实现这些概念(如此更新中的现代链接所示)。

关于MVC的想法

MVC是一种非常松散定义的模式,它对MVC中每个事物(尤其是控制器)所代表的内容的解释持开放态度(通常有些模糊)。Martin Fowler对MVC架构与GUI工具包进行了很好的讨论。

关于设计模式和 FXML

基于JavaFX核心FXML的处理更像是一个工具包,而不是一个完整的开发框架。这个想法是,其他框架可以分层在JavaFX和FXML之上,底层的JavaFX / FXML实现和它们的控制器不会在更高级别的框架上推动任何类型的议程或架构约束。

因此,存在一种故意松散的类比,并将基于 FXML 的核心处理及其控制器映射到 MVC 体系结构。

请参阅 JavaFX 和 MVP – 设计模式的 smörgåsbord 以进行进一步讨论。

考虑使用更高级别的框架

你可能会从采用“固执己见”的JavaFX框架中受益,例如afterburner.fx,它利用控制器和FXML,但提供了更多的刚性结构化框架。Afterburner.fx 遵循 Model View Presenter (MVP) 模型。虽然Afterburner.fx提供了比普通核心JavaFX + FXML更多的功能和结构,但它通过添加一些额外的类和API来以最小的方式做到这一点,你需要学习使用它。


答案 2

您可以尝试JRebirth及其定制的模式:wB-CS-Mvc

这是一个 2 级 MVC 模式,第一个 MVC(应用程序级)是 CSM,第二个是 Mvc 本身(ui 级)。

  • 消息传递和异步内部事件处理的波形
  • 向任何组件 (C|S| 添加通用代码的行为M)
  • 用于管理应用程序命令的命令(可重用代码)
  • 处理一些长服务到线程池中的服务
  • 用于管理 UI 模型的模型
  • 用于创建 UI 的视图
  • 用于处理用户事件的控制器

您可以运行 JRebirth Tour 应用程序以了解更多信息(需要 Java 8):

http://apps.jrebirth.org/jaf/3.0.0/JRebirthTour-3.0.0.jar

java -jar JRebirthTour-3.0.0.jar

您还可以运行演示应用程序:

http://apps.jrebirth.org/demo/8.5.0/JRebirthDemo-8.5.0.jar

java -jar JRebirthDemo-8.5.0.jar

或浏览幻灯片(略显过时):http://fr.slideshare.net/SbastienBordes/javafx-unleashed-with-jrebirth-application-framework


推荐