带有 javaFX 的 MVC
Posted
技术标签:
【中文标题】带有 javaFX 的 MVC【英文标题】:MVC with javaFX 【发布时间】:2014-06-04 23:01:01 【问题描述】:我正在为使用 javaFX 的 MVC 概念而苦苦挣扎。我正在使用 fxml 文件构建一个 javaFX 应用程序。
每个 fxml 文件都分配了一个控制器,但我不认为这个控制器是 MVC 模式所述的一个控制器。我认为它类似于某种 ViewController,它包含对 fxml 对象(按钮、窗格等)的引用。
我的问题是:这个“ViewController”和真正的“Controller”之间的区别到底在哪里。什么对象应该做什么事情?我在哪里设置例如动作监听器?
【问题讨论】:
【参考方案1】:关于 MVC 的思考
MVC 是一个定义非常松散的模式,它可以对 MVC 中的每一个事物(尤其是控制器)所代表的含义进行(通常有些模糊)的解释。关于 Martin Fowler 的 GUI 工具包,有一个很棒的 discussion of the MVC architecture。
关于设计模式和 FXML
基于 JavaFX 核心 FXML 的处理被构建为更多的工具包,而不是完整的开发框架。其他框架可以分层在 JavaFX 和 FXML 之上的想法以及底层 JavaFX/FXML 实现和它们的控制器不会对更高级别的框架施加任何类型的议程或架构约束。
因此,对基于 FXML 的核心处理及其控制器与 MVC 架构进行了刻意的松散类比和映射。
更多讨论请见JavaFX and MVP – a smörgåsbord of design patterns。
考虑使用更高级别的框架
您可能会受益于采用“固执己见”的 JavaFX 框架,例如 afterburner.fx,它利用控制器和 FXML,但提供了更多的刚性结构化框架。 Afterburner.fx 遵循Model View Presenter (MVP) model。尽管 Afterburner.fx 提供了比普通核心 JavaFX+FXML 更多的功能和结构,但它通过添加一些您需要学习使用它的额外类和 API 以最小的方式做到这一点。
【讨论】:
Smörgåsbord 链接已失效。这是回程:JavaFX and MVP – a smörgåsbord of design patterns 死路链接【参考方案2】:您可以尝试使用 JRebirth 的定制模式: wB-CS-Mvc
这是一个 2 级 MVC 模式,第一个 MVC(应用程序级)是 CSM,第二个是 Mvc 本身(ui 级)。
Wave 用于消息传递和异步内部事件处理 将公共代码添加到任何组件 (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
您也可以运行 Demo 应用程序:
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
【讨论】:
以上是关于带有 javaFX 的 MVC的主要内容,如果未能解决你的问题,请参考以下文章
带有 JavaFX 17 的 Leiningen Uberjar
带有 JavaFX 的 Maven 项目(在 `lib` 中有 jar 文件)