管理多个控制器中的多个模型以跟踪它们

时间:2016-05-06 16:40:24

标签: java javafx static singleton fxml

我试图在javafx中创建一个简单的应用程序。

我有8个视图(FXML),因此每个视图都有一个模型,控制器也是如此。

我必须保持"背景"对于每个模型,无论我在哪里...所以我有一个函数setContext,它将采用一个参数,这是一个重组每个模型的类。

所以在每个控制器中,我都有各种型号。

但稍后,我必须有另一页,这将采取所有那些页面(问卷)的结果并显示它,所以我可以有多个问卷...所以我面临完全相同的问题,但是我不想重新做一遍......因为我一旦创建了一份新的调查问卷,就会失去上一份调查问卷的背景。我还必须添加abstractModelabstractController来存放每个模型。这是棘手的。

所以我放弃了每个视图一个控制器的想法。

我最终得到了一个功能应用程序,但是有一个控制器超过1000行...它只是一个调查问卷。

我想知道是否有可能做我尝试做的事情,有多个控制器,但我不需要设置"上下文"?就像......页面/视图以某种方式自动保存并且如果我没有要求它就会重新实例化(就像新的调查问卷会重置一样)。

作为静态类,像singleton一样,但对于视图,我能够为每个调查问卷实例化。但话说回来,我会跟踪旧的。

我很确定这是可能的,但无法找到任何相关内容,也许我的问题表达方式是错误的。

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:1)

你的问题有点抽象,很难给出明确的答案。但是可能会从引入dependency injection框架中受益。

这样做的一种方法是使用Gluon Ignite:“使用这个库,开发人员可以在他们的JavaFX应用程序中使用流行的依赖注入框架,包括在他们的FXML控制器中。”您可以从支持的那些中选择您希望的依赖注入框架(例如,Dagger,Guice或Spring)。使用这些系统,您可以将范围规则应用于模型类,例如Singleton,对于那些您只希望为应用程序设置单个实例的模型。您还可以使用其他作用域规则和生成器来创建具有不同范围的模型,例如在向导的上下文中,或者在每次显示表单时创建新的等等。

请注意,使用依赖注入框架可能会使您的应用程序更难理解。任何维护你的应用程序的人都必须另外学习依赖注入框架。框架将自动创建对象并将引用注入到代码中,并且由于您无法控制的某些看似神奇的生成操作,您的应用程序可能会更难调试。不过,这是一个权衡,对于中型应用程序,使用依赖注入的好处对于许多应用程序来说可能是值得的。根据您提供的描述,您的应用程序可能属于此类,因此您应该认真考虑这种方法。

请注意,依赖注入系统的替代方案是服务定位器(在我之前链接的关于依赖注入的Martin Fowler文章中读到它)。服务定位器的一个示例(非常基本)版本将是这个小JavaFX navigation framework中的vista导航器,尽管它并不假装是一个完整的MVC系统。

  

只是我可以生成多个问卷,这些问卷都具有相同的模型,相同的视图和相同的控制器。但是当我创建一个时,它会实例化所有内容,但它会跟踪所有内容,以便我以后编辑它们

您可以替换内存中的结构,以便使用持久存储来跟踪要编辑的内容,例如基于JPA的数据库访问层或基于NoSQL的数据库访问层。这样做的一个优点还可能是,如果应用程序关闭,然后重新启动,应用程序的状态将被保存,因此用户可以在他们的调查问卷中找到他们中断的位置。