我试图在javafx中创建一个简单的应用程序。
我有8个视图(FXML
),因此每个视图都有一个模型,控制器也是如此。
我必须保持"背景"对于每个模型,无论我在哪里...所以我有一个函数setContext
,它将采用一个参数,这是一个重组每个模型的类。
所以在每个控制器中,我都有各种型号。
但稍后,我必须有另一页,这将采取所有那些页面(问卷)的结果并显示它,所以我可以有多个问卷...所以我面临完全相同的问题,但是我不想重新做一遍......因为我一旦创建了一份新的调查问卷,就会失去上一份调查问卷的背景。我还必须添加abstractModel
和abstractController
来存放每个模型。这是棘手的。
所以我放弃了每个视图一个控制器的想法。
我最终得到了一个功能应用程序,但是有一个控制器超过1000行...它只是一个调查问卷。
我想知道是否有可能做我尝试做的事情,有多个控制器,但我不需要设置"上下文"?就像......页面/视图以某种方式自动保存并且如果我没有要求它就会重新实例化(就像新的调查问卷会重置一样)。
作为静态类,像singleton
一样,但对于视图,我能够为每个调查问卷实例化。但话说回来,我会跟踪旧的。
我很确定这是可能的,但无法找到任何相关内容,也许我的问题表达方式是错误的。
有什么想法吗?感谢
答案 0 :(得分:1)
你的问题有点抽象,很难给出明确的答案。但是可能会从引入dependency injection框架中受益。
这样做的一种方法是使用Gluon Ignite:“使用这个库,开发人员可以在他们的JavaFX应用程序中使用流行的依赖注入框架,包括在他们的FXML控制器中。”您可以从支持的那些中选择您希望的依赖注入框架(例如,Dagger,Guice或Spring)。使用这些系统,您可以将范围规则应用于模型类,例如Singleton,对于那些您只希望为应用程序设置单个实例的模型。您还可以使用其他作用域规则和生成器来创建具有不同范围的模型,例如在向导的上下文中,或者在每次显示表单时创建新的等等。
请注意,使用依赖注入框架可能会使您的应用程序更难理解。任何维护你的应用程序的人都必须另外学习依赖注入框架。框架将自动创建对象并将引用注入到代码中,并且由于您无法控制的某些看似神奇的生成操作,您的应用程序可能会更难调试。不过,这是一个权衡,对于中型应用程序,使用依赖注入的好处对于许多应用程序来说可能是值得的。根据您提供的描述,您的应用程序可能属于此类,因此您应该认真考虑这种方法。
请注意,依赖注入系统的替代方案是服务定位器(在我之前链接的关于依赖注入的Martin Fowler文章中读到它)。服务定位器的一个示例(非常基本)版本将是这个小JavaFX navigation framework中的vista导航器,尽管它并不假装是一个完整的MVC系统。
只是我可以生成多个问卷,这些问卷都具有相同的模型,相同的视图和相同的控制器。但是当我创建一个时,它会实例化所有内容,但它会跟踪所有内容,以便我以后编辑它们
您可以替换内存中的结构,以便使用持久存储来跟踪要编辑的内容,例如基于JPA的数据库访问层或基于NoSQL的数据库访问层。这样做的一个优点还可能是,如果应用程序关闭,然后重新启动,应用程序的状态将被保存,因此用户可以在他们的调查问卷中找到他们中断的位置。