2014-09-10 61 views
5

很多时候,我看到人们在这个截图分手了项目成2个独立的项目,如:将项目分成两个独立的项目有什么意义?

enter image description here

什么是分隔条件锭和IngotAPI,而不是把他们都在同一个项目点因为他们无论如何都被编译在一起?

+1

也许你可以单独分发它们,如果其他项目只需要其中一个例如 – Leo 2014-09-10 12:17:15

+0

[增加模块性](http://en.wikipedia.org/wiki/Modular_programming)。如果不知道这个特定项目的任何内容,Core和API模块通常具有不同的功能。也许这个问题可能更适合[Programmers.SE](http://programmers.stackexchange.com/)? – blgt 2014-09-10 12:28:31

+1

这不是一个基于意见的问题。 – Andres 2014-09-10 13:04:58

回答

1

几个案例的某些部分。

需要或希望使API 从其实施(其中之一)解耦。使用Java SPI(服务提供者接口),您只需提供一个接口,针对哪个客户端应用程序。然后,java SPI提供查找来使用其中一种可能的实现。用于XML解析器。类似于JDBC。将API解耦意味着如果API保持不变,则不需要重新编译客户端,但实现已更改。

通常有几个项目允许考虑每个项目模块,一个单元,导入其他模块的指定列表,并形成一个分层的层次结构。这可以为软件系统提供更高的质量,无需来回进口。下一代Java将获得模块。

0

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

例如,如果IngotAPI发展良好,则不应该对Ingot项目有任何依赖性。这意味着,如果您对Ingot项目进行了任何更改,则不需要独立测试IngotAPI,因为它不会受到影响(高内聚性),您只需测试Ingot以及Ingot使用IngotAPI的位置。

0

IngotAPI似乎应该很容易从其他项目中引用。 也许它会在未来的其他地方使用。

最后它并不重要,因为您也可以将您的课程从其他项目复制到最近的课程中。

0

主要原因是当你实现一个API时,你想把它分发给潜在的客户端。通过分成两个(或更多)项目,您只能分配接口和业务对象,并为自己保留实现。

通过这种方式,您不必在任何实施变更上重新分配。

1

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

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

有了这个解决方案:

  • 如果有新的客户端到达,你会很容易地创建新的要求,实现在不改变API或客户端代码。它使您的旧代码更加可重用。
  • 如果仅在实施中进行了更改,则不必重新构建API或客户端。它可以节省开发者在工作中的时间
  • 在测试过程中,你可以提供一个实现与模拟UPS的业务逻辑