如何使桌面应用程序模块化?
-
06-07-2019 - |
题
如何使Java桌面应用程序模块化?如何对模块进行分类?
其他提示
了解OSGi技术。应用程序的每个模块(称为bundle)都是一个单独的jar,OSGi负责依赖解析并动态加载bundle类路径等。
对于桌面应用程序,我强烈建议您从 www.dynamicjava.org 查看DA-Launcher。它使您的应用程序SOOO更容易部署。它们还有一些像动态JPA这样的东西,对任何OSGi应用程序都很有用。
你的意思是模块化的Eclipse?
如果您将Java桌面应用程序基于Eclipse RCP或NetBeans RCP,那么您将获得“免费”的模块化功能。 (差不多; - ))
您的问题的答案实际上取决于" modular" 的含义。
在使应用程序模块化时,您必须考虑几个层面的问题。
首先,你必须考虑“模块化”是否属于模块性。您寻求的是架构模态, deploymeyment time modularity 或运行时模块化。
在任何情况下,每个连续级别都意味着所有先前的级别。
对于初学者 - 要使您的应用程序模块化,您必须从架构开始。将您的顾虑分成明确定义的清洁切割部件,这些部件具有明确定义的接口以适应“外部世界”。使用良好的设计模式和依赖注入和的设计单元可测试性在实现模块化设计基础的关注点之间取得了很大进展。
从小处开始,但请记住大图。在设计系统较大的块(或模块)时,请确保它们具有尽可能少的重叠区域。每个模块都应该对它们所处的环境几乎没有任何假设,只能为一个问题服务。它需要来自同行的任何服务都应该由外部初始化明确提供(最好使用依赖注入将模块粘合到一个正常工作的应用程序中)。
如果您的架构是模块化的,那么将问题分离到他们自己的部署单元(以项目, jars , bundle ,插件,扩展或其他),您可以在部署期间轻松地混合和匹配各种模块,以获得特定所需的功能集应用实例。这就是我所说的部署时模块性。
支持部署时间模块化的方法是依赖注入框架,例如 Guice , Spring framefork 等。
运行时模块化我认为这类似于Eclipse和NetBeans插件或Mozilla扩展提供的模块化,您可以在部署/安装后更改应用程序模块的配置和设置。
这意味着某种架构和基础架构可以在应用程序初始化时或运行时动态识别新的插件/扩展。
Latter还意味着必须构建所有模块,隐含的假设是模块使用的任何服务都可以在任何时间点轻易消失,从而额外努力确保在这个不稳定的世界中运行的代码的健壮性。
我还建议使用Eclipse RCP或查看Netbeans RCP。两者非常相似。将它们分开的一件事是Eclipse RCP使用本机GUI库而不是Netbeans使用的Swing。
优点和缺点是虽然您更受限于操作系统提供的那种控件,但Elcipse可能会快一些。 Netbeans使用Swing,大多数Java开发人员可能更熟悉它,并且开发自定义控件的能力是无穷无尽的。
自从我使用Eclipse RCP以来已经有一段时间了,所以我可能错误地在Eclipse RCP中开发自定义控件。
他们的共同点是开发智能和模块化桌面应用程序很有趣,您可以在更短的时间内获得专业的应用程序!
祝你好运!