成功模块化系列:依赖模块

日期: 2011-09-07 作者:Peter Kriens翻译:刘志超 来源:TechTarget中国 英文

我们依赖什么呢?   Jigsaw实现了一个模块化系统,Java8在某种程度上偏离Java模块化精神,这将成为一个不合格的语言,未来会在Java社区会引起无数另人头痛的事。在这篇文章中,我会说明Jigswa的设计不适合Java,因为它忽略了包,导入、导出模块使用了错误的依赖模型。   模块化   如果Jigsaw是一个模块化系统,那么,我们首先需要定义模块化:   模块化封装内容和其他模块化的一些明确的共享内容   一个理想的模块化包括以下几种内容: 私有化——私有化内容可以被修改,而不影响其他模块。在本地范围内修改私有化内容;外部是看不到私有的内容。

例如,在Java中,私有属性只能对自己的类……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

我们依赖什么呢?

  Jigsaw实现了一个模块化系统,Java8在某种程度上偏离Java模块化精神,这将成为一个不合格的语言,未来会在Java社区会引起无数另人头痛的事。在这篇文章中,我会说明Jigswa的设计不适合Java,因为它忽略了包,导入、导出模块使用了错误的依赖模型。

  模块化

  如果Jigsaw是一个模块化系统,那么,我们首先需要定义模块化:

  模块化封装内容和其他模块化的一些明确的共享内容

  一个理想的模块化包括以下几种内容:

  • 私有化——私有化内容可以被修改,而不影响其他模块。在本地范围内修改私有化内容;外部是看不到私有的内容。例如,在Java中,私有属性只能对自己的类产生影响,其他引用它的类不会受到影响。
  • 导出——导出内容共享给其他的模块。改变导出内容会影响其他模块;因此,它在一个约束的条件下演变,因为它不知道它的依赖是什么。在Java中,public关键字就是指导出。
  • 导入——导入的内容来自于另一个模块。导入模块明确地指出要依赖导入内容。导入模块内部可以通过编译器验证这些内容,在运行时是否满足VM。

  因此,一个典型的模块可以描述为:

典型的模块

  模块化提供了大量的好处。然而,最重要的好处是他们限制了软件系统的领域。在无模块化的世界中,改变可以影响整个系统;在模块化的世界中,改变限制私有化内容和一些导出(公共的)内容。

  在大型系统中,减少领域的提供,获得的好处就会越多。

  在我们定义的模块中,内容的概念一直被刻意的保持模糊。模糊的原因是,模块化是一个模型,可以提供不同的等级。在过去的60年中,我们多次使用这种模型构建软件。虽然,有人说功能像模块化,Java类就是最明显的例子。

  类、模块化和内容

  如果Java类是模块化的,那么内容是什么呢?对于一个类来说,成员(属性和方法)就是内容。例如,圆作为类成员,方块是成员内容的符号,我们可以把类模块化如下(黑色是导出(公共的),灰色的私有的,白色是导入的):

把类模块化如下(黑色是导出(公共的),灰色的私有的,白色是导入的

  Java也有另外一个模块——包。Java语言规范(JLS)中比较了Modula的模块化包。它应该清楚包的内容是类,象征着一个圆。所以,如果我们为一个包使用方形标志,我们可以把包描述如下:

包描述

  有时,从公众的讨论中,得到这样的结论,JSR 277、JSR 294、OSGI以及Jigsaw正在讨论的就是Java模块。这是错误的,模块化不是明确的东西,而是一个模型,可以重复应用在先前模块层。因此,整个讨论都是关于在Java中我们如何陈述下一层的模块化。

相关推荐