我正在为使用 javaFX 的 MVC 概念而苦苦挣扎。我正在使用 fxml 文件构建一个 javaFX 应用程序。
每个 fxml 文件都分配了一个 Controller ,但我不认为这个 Controller 是 MVC 模式所述的一个 Controller 。我认为它类似于某种 ViewController,它包含对 fxml 对象(按钮、 Pane 等)的引用。
我的问题是:这个“ViewController”和真正的“Controller”之间的区别到底在哪里。什么对象应该做什么事情?我在哪里设置例如 Action 监听器?
最佳答案
2022 年更新
关于这个主题的最佳文章是 Eden Coding 的:
最好的 StackOverflow 答案是:
多年前的原始答案如下。其中的一些信息仍然是相关的。某些链接和引用的框架不再可用或不再受支持。但是,您不需要 JavaFX 核心功能之外的框架来实现这些概念(如本次更新中的现代链接所示)。
关于 MVC 的思考
MVC 是一个定义非常松散的模式,它可以对 MVC 中的每一个事物(尤其是 Controller )所代表的含义进行(通常有些模糊)的解释。有一个很棒的discussion of the MVC architecture关于 Martin Fowler 的 GUI 工具包。
关于设计模式和 FXML
基于 JavaFX 核心 FXML 的处理被构建为更多的工具包,而不是完整的开发框架。这个想法是其他框架可以分层在 JavaFX 和 FXML 之上,底层的 JavaFX/FXML 实现和它们的 Controller 不会对更高级别的框架施加任何类型的议程或架构限制。
因此,基于 FXML 的核心处理及其 Controller 与 MVC 架构之间存在故意松散的类比和映射。
见 JavaFX and MVP – a smörgåsbord of design patterns进一步讨论。
考虑使用更高级别的框架
您可能会受益于采用“自以为是”的 JavaFX 框架,例如 afterburner.fx ,它利用 Controller 和 FXML,但提供了更多的刚性结构化框架。 Afterburner.fx 遵循 Model View Presenter (MVP) model .尽管 Afterburner.fx 提供了比普通核心 JavaFX+FXML 更多的功能和结构,但它通过添加一些您需要学习使用它的额外类和 API 以最小的方式做到这一点。
关于java - 带有 javaFX 的 MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187932/