回答
几个案例的某些部分。
需要或希望使API 从其实施(其中之一)解耦。使用Java SPI(服务提供者接口),您只需提供一个接口,针对哪个客户端应用程序。然后,java SPI提供查找来使用其中一种可能的实现。用于XML解析器。类似于JDBC。将API解耦意味着如果API保持不变,则不需要重新编译客户端,但实现已更改。
通常有几个项目允许考虑每个项目模块,一个单元,导入其他模块的指定列表,并形成一个分层的层次结构。这可以为软件系统提供更高的质量,无需来回进口。下一代Java将获得模块。
首先使代码更加可重用。通过在不同的项目中打包不同的功能,可以更容易地找到想要传送到另一个项目的功能(在这种情况下,您可以将整个IngotAPI导出到新项目中)。 第二次测试。当每个项目将自己的单元测试分开时,保持控制测试结果要容易得多,而不是检查两个项目之间的集成的测试。
例如,如果IngotAPI发展良好,则不应该对Ingot项目有任何依赖性。这意味着,如果您对Ingot项目进行了任何更改,则不需要独立测试IngotAPI,因为它不会受到影响(高内聚性),您只需测试Ingot以及Ingot使用IngotAPI的位置。
IngotAPI似乎应该很容易从其他项目中引用。 也许它会在未来的其他地方使用。
最后它并不重要,因为您也可以将您的课程从其他项目复制到最近的课程中。
主要原因是当你实现一个API时,你想把它分发给潜在的客户端。通过分成两个(或更多)项目,您只能分配接口和业务对象,并为自己保留实现。
通过这种方式,您不必在任何实施变更上重新分配。
这样做的一个原因是实现可以互换。
想象一下,您有两个客户使用您的应用程序的情况。他们对于如何做某事都有不同的要求(如算法不同),但结果的类型是相同的。在这种情况下,客户端代码应该只能直接与API协同工作,而不依赖任何实现。在构建期间,您可以指定应该使用哪个实现。
有了这个解决方案:
- 如果有新的客户端到达,你会很容易地创建新的要求,实现在不改变API或客户端代码。它使您的旧代码更加可重用。
- 如果仅在实施中进行了更改,则不必重新构建API或客户端。它可以节省开发者在工作中的时间
- 在测试过程中,你可以提供一个实现与模拟UPS的业务逻辑
也许你可以单独分发它们,如果其他项目只需要其中一个例如 – Leo 2014-09-10 12:17:15
[增加模块性](http://en.wikipedia.org/wiki/Modular_programming)。如果不知道这个特定项目的任何内容,Core和API模块通常具有不同的功能。也许这个问题可能更适合[Programmers.SE](http://programmers.stackexchange.com/)? – blgt 2014-09-10 12:28:31
这不是一个基于意见的问题。 – Andres 2014-09-10 13:04:58