2009-05-06 101 views

回答

5

作为设计目标,模块化意味着你想拥有那些之间的不同部分(模块)组成的应用程序,其中每个部分都有其责任区,并包含所有与该区域(高cohesion)类和通信部分通过狭窄的,定义明确的和有文档的接口发生(loose coupling)。

您可以通过事先规划您的设计并在实施过程中不断调整这些planse并重构代码来实现此目的。

将技术模块(如GUI,网络通信或DB访问(它们通常形成层,尽管可以细分为几个模块)和包含特定于应用程序的逻辑的域模块并且通常不形成图层。

+0

你可以举一些关于模块应该如何分类的例子吗? – Joset 2009-05-06 08:44:40

+0

你是什么意思与“分类”?责任区? – 2009-05-06 09:02:33

+0

是的。换句话说,模块应该如何分层以及层是什么? – Joset 2009-05-06 09:29:52

4

你是说像Eclipse一样的模块化?

如果立足于Eclipse RCP的NetBeans的或RCP您的Java桌面应用程序,你会得到模块化“免费”(几乎;-))

5

看一看OSGi的技术。您的应用程序的每个模块(称为捆绑包)是一个单独的jar,并且OSGi负责依赖关系解析和动态加载捆绑类路径等。

对于桌面应用程序,我强烈建议您从www.dynamicjava.org查看DA-Launcher。它使部署你的应用程序SOOO变得更容易。他们还有一些东西,比如动态JPA,对于任何OSGi应用程序都很有用。

1

我也会推荐Eclipse RCP或者看看Netbeans RCP。这两者非常相似。将它们分开的一件事是Eclipse RCP使用本地GUI库而不是Netbeans使用的Swing。

优点和缺点是,Elcipse可能会快一点,尽管您更受限于操作系统提供的那种控件。 Netbeans使用Swing,这对大多数Java开发人员来说可能更为熟悉,开发自定义控件的能力是无止境的。

自从我与Eclipse RCP合作以来,我已经有一段时间了,所以我可能在开发Eclipse RCP中的自定义控件时出错。

他们的共同之处在于,开发智能和模块化桌面应用程序非常有趣,您可以在更短的时间内获得专业外观的应用程序!

祝你好运!

1

你也可以看看的Java插件框架,

http://jpf.sourceforge.net/

JPF可以大大提高您的Java系统 的模块化 和可扩展性,并最大限度地减少支持和维护 成本。

3

回答你的问题实际上取决于你的意思是没“模块化”

当您将应用程序模块化时,您必须考虑几个关注层级。

首先,如果“模块化”你追求的是建筑modlaritydeploymeyment时间模块化运行时模块必须考虑的。

在任何情况下,每个连续的级别都意味着以前的所有级别。

对于初学者 - 为了使您的应用程序模块化,您必须从架构开始。将您的疑虑分解为明确清晰的部件,这些部件与“外部世界”具有明确的界面。使用好的design patternsdependency injection和设计unit testability在这里走了很长的一段路,以实现模块化设计的基石的良好分离问题。

从小开始,但请记住大图。当设计一个更大的块(或模块)时,确保它们有尽可能少的重叠区域。每个模块都不应该假设他们所处的环境,只服务于一个单一的问题。它需要从它的同龄人提供的任何服务应该通过外部初始化(最好使用依赖注入将模块粘贴到一个工作应用程序中)明确提供。

如果你的架构是模块化的,它是一件容易的事分离关注到自己的部署单元(在项目插件扩展或形式无论如何),您可以在部署期间轻松开始混合和匹配各种模块,以获取特定应用程序实例所需的确切功能集。这就是我的意思是部署时间模块性

去朝着使部署时间模块化很长的路是依赖注入框架,如GuiceSpring framefork等。

运行时模块我看到这是一个类似于部署/安装后,Eclipse和NetBeans插件或Mozilla扩展提供在那里你可以改变配置和设置您的应用程序模块的模块化的方式。

这意味着某种架构和基础架构可以在应用程序初始化时或在运行时动态识别新的插件/扩展。

后者也意味着你所有的模块都必须隐含地假设,任何模块使用的服务都可以在任何时候轻松消失,从而确保代码在这个不稳定的世界中运行的稳健性。