JavaFX中的MVC模式

27

我正在使用JavaFX学习MVC模式,但感到困难。我正在使用FXML文件构建JavaFX应用程序。

每个FXML文件都有一个分配的控制器,但我认为这个控制器并不符合MVC模式的要求。我将其视为某种ViewController,它保存对FXML对象(按钮、面板等)的引用。

我的问题是:这个“ViewController”和真正的“Controller”之间的区别在哪里?什么对象应该负责做什么事情?例如,我在哪里设置actionListeners?

2个回答

22

2022年更新

关于这个主题的最佳写作是Eden Coding的:

最佳StackOverflow答案是:

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

MVC思考

MVC是一个相当松散的定义模式,对于MVC中的每个事物(特别是控制器)的含义往往存在着模糊的解释。Martin Fowler有一个关于GUI工具包中MVC体系结构的讨论

关于设计模式和FXML

JavaFX核心的FXML基于处理的设计更像是一个工具包,而不是完整的开发框架。其目的是让其他框架能够在JavaFX和FXML的基础上进行扩展,底层JavaFX/FXML实现以及控制器不会对较高级别的框架施加任何形式的约束或体系结构限制。
因此,核心FXML处理和其控制器与MVC架构之间存在故意宽松的类比和映射关系。
参见JavaFX和MVP-设计模式大杂烩以获取更多讨论内容。 考虑使用更高级别的框架。 你可能会受益于采用一个“有主见”的JavaFX框架,如afterburner.fx,它利用控制器和FXML,但提供了更严格的结构化框架。 Afterburner.fx遵循模型视图控制器(MVP)模式。虽然Afterburner.fx比纯核心JavaFX+FXML提供了更多的功能和结构,但它只是通过添加一些额外的类和API来以最小的方式实现,你需要学习使用它。

4
Smörgåsbord链接已失效。以下是Wayback Machine的快照:JavaFX和MVP - 设计模式的自助餐 - shaggyaxe
2
失效的 Wayback 链接 - Taylor Lopez
JavaFX和MVP - 设计模式的大杂烩 - wayback-link目前可以使用。如果您想知道,您可以在此处找到源代码示例:https://code.google.com/archive/p/jfxee/source/default/source - Benjamin Peter

2
您可以尝试使用定制的模式JRebirth:wB-CS-Mvc。
这是一个2级MVC模式,第一个MVC(应用程序级别)是CSM,第二个是Mvc本身(ui级别)。
  • Wave 用于消息传递和异步内部事件处理
  • Behavior 用于向任何组件(C|S|M)添加通用代码
  • Command 用于管理应用程序命令(可重用代码)
  • Service 用于处理某些长时间服务并放入线程池中
  • Model 用于管理您的UI的模型
  • View 用于创建您的UI
  • Controllers 用于处理用户事件
您可以运行JRebirth Tour Application来了解更多(需要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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接