完整性检查:包和模块如何一起使用?

时间:2017-10-04 02:42:28

标签: java

在Java 9之前,我曾假设软件包是一种促进/强制执行代码模块化和解决命名空间问题的方法。套餐实际上解决后者的问题确实很差(com.popkernel.myproject.Employee myEmployee = new com.popkernel.myproject.Employee();,呃)所以我主要关注的是前者的好处。

尽管软件包在执行模块化方面做得很差,但我发现它们在促进模块化方面非常有效。 "这个类属于哪个包?"一直是一个有启发性的问题,我很欣赏Java强迫我自问它。

但是现在Java 9模块已经存在,它们比包更好地强制实施模块化问题。实际上,您可以完全用模块组成一个新项目,其中每个模块包装一个包。

当然,与包相比,模块有很多额外的样板,更不用说与包不同的怪癖,只是通过检查它的.java文件就不可能分辨出一个类所属的模块。

因此,我一起使用包和模块的计划是:当我编写代码时,将相关概念分组到包中。然后,如果我决定分发我正在处理的代码,请将其形式化为模块。

这是一种合理利用这些概念的理智方式吗?

1 个答案:

答案 0 :(得分:1)

  

这是一种合理利用这些概念的理智方式吗?

,有点儿。虽然您可以通过模块化代码获得其他好处,例如可靠配置强封装提高可读性等。

  
    

因此,我一起使用包和模块的计划是:     当我编写代码时,将相关概念分组到包中。然后,如果我     决定我想分发我正在处理的代码,将其形式化     一个模块。

  

您可以问自己的一个简单问题是,当您使用模块时,以及将相关概念分组到包中,最终如何对相关包进行分组?

可能与之相匹配的答案是引入了一种新的Java程序组件 - Modules

  

模块是一个命名的,自描述的代码和数据集合。它的   代码被组织为包含类型的,即   Java类和接口;其数据包括资源和其他   各种静态信息。

到目前为止,这些集合主要针对JAR文件,这些文件被分发为在其他文件中作为依赖项/库使用,但它们正在成为传统格式,并且与模块有很大不同。在我最近对Java 9 - What is the difference between "Modules" and "JAR" files?的一个回答中,我试图详细说明差异。