Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 把一个项目分成两个独立的项目有什么意义?_Java - Fatal编程技术网

Java 把一个项目分成两个独立的项目有什么意义?

Java 把一个项目分成两个独立的项目有什么意义?,java,Java,很多时候,我看到人们将一个项目分成两个独立的项目,如下图所示: 将Dembol和IngotAPI分开,而不是将它们放在同一个项目中,因为它们是一起编译的,这有什么意义呢?首先是为了使代码更加可重用。通过将不同的功能打包到不同的项目中,您可以更容易地找到要传递到另一个项目的功能(在这种情况下,您可以将整个IngotAPI导出到一个新项目)。 第二个是测试。当每个项目都有单独的单元测试时,控制测试结果要比检查两个项目之间集成的测试容易得多 例如,如果IngotAPI开发得很好,它就不应该对Ingo

很多时候,我看到人们将一个项目分成两个独立的项目,如下图所示:


将Dembol和IngotAPI分开,而不是将它们放在同一个项目中,因为它们是一起编译的,这有什么意义呢?

首先是为了使代码更加可重用。通过将不同的功能打包到不同的项目中,您可以更容易地找到要传递到另一个项目的功能(在这种情况下,您可以将整个IngotAPI导出到一个新项目)。 第二个是测试。当每个项目都有单独的单元测试时,控制测试结果要比检查两个项目之间集成的测试容易得多


例如,如果IngotAPI开发得很好,它就不应该对IngotAPI项目有任何依赖关系。这意味着,如果您对IngotAPI项目进行任何更改,您不需要单独测试IngotAPI,因为它不会受到影响(高内聚性),您只需要测试Ingot,以及Ingot在何处使用IngotAPI。

IngotAPI似乎是其他项目中易于参考的内容。 也许它将来会在其他地方使用


最后,这并不重要,因为您也可以将其他项目中的类复制到最近的项目中

主要原因是,当您实现API时,您希望将其分发给潜在的客户端。通过划分为两个(或多个)项目,您可以只分发接口和业务对象,并为自己保留实现


这样,您就不必重新发布任何实现更改。

这样做的一个原因是实现可以互换

假设有两个客户机使用您的应用程序。它们对如何做一件事都有不同的要求(例如算法不同),但结果的类型是相同的。在这种情况下,客户端代码应该只直接与API一起工作,而不依赖于任何实现。在构建过程中,您可以指定应该使用哪个实现

使用此解决方案:

  • 如果有任何新客户机到来,您将很容易地为新需求创建一个实现,而无需更改API或客户机代码。它使您的旧代码更加可重用
  • 如果只在实现中进行了更改,则不必重建API或客户端。它在工作中节省了开发人员的时间
  • 在测试期间,您可以为业务逻辑的某些部分提供带有实体模型的实现
几个案例

需要或希望API与(其中一个)实现解耦。使用JavaSPI(服务提供商接口),您只提供了一个接口,客户机应用程序可以使用该接口。然后JavaSPI提供了一个查找来使用其中一个可能的实现。用于XML解析器。JDBC也是如此。解耦API意味着,如果API保持不变,但实现已更改,则无需重新编译客户端


一般来说,有几个项目允许考虑每个项目“强>模块< /强>,一个单元,它导入指定的其他模块列表,并形成一个分层的层次结构。这可以给软件系统提供更高的质量,无需来回导入。下一代java将获得模块。

如果其他项目只需要其中一个模块,也许您可以单独分发它们。在不了解这个特定项目的情况下,核心模块和API模块通常具有不同的功能。也许这个问题更适合你?这不是一个基于观点的问题。