在多个控制器中管理多个模型以跟踪它们
Manage multiple models in multiple controllers to keep track on them
我试图在 javafx 中制作一个简单的应用程序。
我有 8 个视图 (FXML
),所以每个视图一个模型,控制器也一样。
无论我身在何处,我都必须为每个模型保留 "context"...所以我有一个函数 setContext
,它将采用一个 class 参数,每个参数都重新组合模型。
所以在每个控制器中,我都有每个模型。
但稍后,我不得不有另一个页面,它将获取所有这些页面(问卷)的结果并显示出来,这样我就可以有多个问卷...所以我面临着完全相同的问题,但我不想再做一遍......因为一旦我创建了一个新的问卷,我就失去了前一个的上下文。我还必须添加 abstractModel
和 abstractController
来存放每个型号。这是棘轮。
所以我放弃了每个视图一个控制器的想法。
我最终得到了一个功能性应用程序,但是有一个超过 1000 行的控制器...这只是一份问卷。
我想知道是否可以使用多个控制器来完成我尝试做的事情,但我不需要设置 "context"?就像... pages/views 会以某种方式自动保存,如果我不要求它就不会重新实例化(就像新问卷会重置一样)。
Sush 作为静态 class,类似于 singleton
,但用于视图并且我能够为每个问卷实例化它。但话又说回来,我会跟踪旧的。
我很确定这是可能的,但找不到任何相关信息,也许我对问题的表述是错误的。
有什么想法吗?谢谢
你的问题有点抽象,很难给出明确的答案。但是您 可能 会受益于引入 dependency injection 框架。
一种方法是使用 Gluon Ignite: "With this library, developers can use popular dependency injection frameworks in their JavaFX applications, including inside their FXML controllers.". You can choose a dependency injection framework you wish from those supported (for example, Dagger, Guice or Spring). With those systems, you can apply scoping rules to your model classes such as Singleton,用于那些您只希望应用程序拥有一个实例的模型。您还可以使用其他范围规则和生成器来创建具有不同范围的模型,例如在向导的上下文中或每次显示表单时创建新的模型等。
请注意,使用依赖项注入框架可能会使您的应用程序更难理解。维护您的应用程序的任何人都必须额外学习依赖注入框架。该框架将创建对象并将对它们的引用自动注入到您的代码中,并且由于您无法控制的一些看似神奇的生成操作,您的应用程序可能更难调试。不过,这是一个权衡,对于中型应用程序,使用依赖注入的好处对于很多应用程序来说可能是值得的。从您提供的描述来看,您的申请可能属于这种class,所以您应该认真考虑这种方法。
请注意,依赖注入系统的替代方法是服务定位器(在我之前链接的关于依赖注入的 Martin Fowler 文章中了解它)。服务定位器的示例(非常基本)版本将是这个小 JavaFX navigation framework 中的 vista 导航器,尽管它并不假装是一个完整的 MVC 系统。
It's just that I can generate multiple questionnaires, which all have the same models and same views and same controllers. But when I create one, it instantiate everything, but it keeps track on all of them so I can edit them later
您可以用持久存储替换您的内存结构,以跟踪要编辑的内容,例如基于 JPA 的数据库访问层或基于 NoSQL 的数据库访问层。这样做的一个好处还在于,如果应用程序关闭然后重新启动,应用程序的状态将被保存,因此用户可以从他们在调查问卷中离开的地方继续。
我试图在 javafx 中制作一个简单的应用程序。
我有 8 个视图 (FXML
),所以每个视图一个模型,控制器也一样。
无论我身在何处,我都必须为每个模型保留 "context"...所以我有一个函数 setContext
,它将采用一个 class 参数,每个参数都重新组合模型。
所以在每个控制器中,我都有每个模型。
但稍后,我不得不有另一个页面,它将获取所有这些页面(问卷)的结果并显示出来,这样我就可以有多个问卷...所以我面临着完全相同的问题,但我不想再做一遍......因为一旦我创建了一个新的问卷,我就失去了前一个的上下文。我还必须添加 abstractModel
和 abstractController
来存放每个型号。这是棘轮。
所以我放弃了每个视图一个控制器的想法。
我最终得到了一个功能性应用程序,但是有一个超过 1000 行的控制器...这只是一份问卷。
我想知道是否可以使用多个控制器来完成我尝试做的事情,但我不需要设置 "context"?就像... pages/views 会以某种方式自动保存,如果我不要求它就不会重新实例化(就像新问卷会重置一样)。
Sush 作为静态 class,类似于 singleton
,但用于视图并且我能够为每个问卷实例化它。但话又说回来,我会跟踪旧的。
我很确定这是可能的,但找不到任何相关信息,也许我对问题的表述是错误的。
有什么想法吗?谢谢
你的问题有点抽象,很难给出明确的答案。但是您 可能 会受益于引入 dependency injection 框架。
一种方法是使用 Gluon Ignite: "With this library, developers can use popular dependency injection frameworks in their JavaFX applications, including inside their FXML controllers.". You can choose a dependency injection framework you wish from those supported (for example, Dagger, Guice or Spring). With those systems, you can apply scoping rules to your model classes such as Singleton,用于那些您只希望应用程序拥有一个实例的模型。您还可以使用其他范围规则和生成器来创建具有不同范围的模型,例如在向导的上下文中或每次显示表单时创建新的模型等。
请注意,使用依赖项注入框架可能会使您的应用程序更难理解。维护您的应用程序的任何人都必须额外学习依赖注入框架。该框架将创建对象并将对它们的引用自动注入到您的代码中,并且由于您无法控制的一些看似神奇的生成操作,您的应用程序可能更难调试。不过,这是一个权衡,对于中型应用程序,使用依赖注入的好处对于很多应用程序来说可能是值得的。从您提供的描述来看,您的申请可能属于这种class,所以您应该认真考虑这种方法。
请注意,依赖注入系统的替代方法是服务定位器(在我之前链接的关于依赖注入的 Martin Fowler 文章中了解它)。服务定位器的示例(非常基本)版本将是这个小 JavaFX navigation framework 中的 vista 导航器,尽管它并不假装是一个完整的 MVC 系统。
It's just that I can generate multiple questionnaires, which all have the same models and same views and same controllers. But when I create one, it instantiate everything, but it keeps track on all of them so I can edit them later
您可以用持久存储替换您的内存结构,以跟踪要编辑的内容,例如基于 JPA 的数据库访问层或基于 NoSQL 的数据库访问层。这样做的一个好处还在于,如果应用程序关闭然后重新启动,应用程序的状态将被保存,因此用户可以从他们在调查问卷中离开的地方继续。