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