我试图为我想制作的图片处理桌面应用程序提出一个“大图片”概述,但是由于我缺乏实施UI设计模式的丰富经验-我正在努力寻找合适的一个满足我的需求。
我在UI设计模式方面的大部分经验是一些学校项目,该项目利用Java Swing的Model-View-Presenter(MVP)设计模式。由于Java Swing即将淘汰,因此我正尝试使用JavaFx满足我的UI需求。
最近在几个项目中,我尝试将MVP与JavaFX一起使用几乎没有成功,因为我被困在最长的时间内,将用户操作从View(JavaFX应用程序)连接到模型。我一直遇到障碍,因为任何尝试将View实例连接到Presenter的尝试(然后会给出逻辑,其中Model方法(此处的细节并不重要))都将失败,因为View会创建自身的另一个实例(分离start())中的应用程序线程,而没有引用Presenter或Model方法。
因此,在急于完成项目的过程中,我实施了一项非常丑陋的工作,基本上将Model方法直接与其相关的View组件挂钩。这些项目有效,但是违反了许多基本设计原则。
继续进行下一个项目,我希望避免在开始时就犯一个错误,那就是采用更好的总体设计,该设计可以充分解决我所面临的问题(如上所述),同时仍保持基本的设计原则。
我想到的任何解决方案都涉及将View(JavaFx应用程序)作为程序运行的来源,但这似乎违反了具有可互换Views的整个想法。 JavaFX只是不打算对我要寻找的东西灵活吗?在设计模式和JavaFX方面,有人对我的问题有任何潜在的解决方案吗?
答案 0 :(得分:0)
JavaFX中的MVP模式实现为连接到控制器类的FXML View,作为Presenter,该Presenter根据需要启动单独的Model线程,以供各种计算/任务使用,以供View控件使用。在JavaFX中,您可以使用SceneBuilder创建FXML视图。 SceneBuilder在FXML文件中创建GUI的可视部分,该文件是包含所有可视属性的被动文件。然后,附加一个控制器类,该类处理来自GUI控件的所有事件。这实现了MVP的Presenter方面。然后,模型是一个单独的线程,在后台运行各种计算,并根据需要与JavaFX线程进行交互。如果计算不太繁琐,则可以在JavaFX线程本身中运行它们。如果它们占用大量CPU周期,则必须在单独的线程中运行,然后才能锁定GUI。