很多时候,我看到人们将项目分成两个独立的项目,如截图:
分离Ingot和IngotAPI的重点是什么,而不是将它们放在同一个项目中,因为它们总是被编译在一起?
答案 0 :(得分:1)
这样做的一个原因是实现可以互换。
想象一下,有两个客户使用您的应用程序。它们对于如何做某事有不同的要求(例如算法不同)但结果的类型是相同的。在这种情况下,客户端代码应仅直接使用API,并且不依赖于任何实现。在构建期间,您可以指定应该使用哪个实现。
使用此解决方案:
答案 1 :(得分:1)
有几种情况。
需要或希望API 解耦来自(其中一个)其实现。使用 Java SPI (服务提供程序接口),您只提供一个接口,针对哪个客户端应用程序。然后,java SPI提供查找以使用其中一种可能的实现。用于XML解析器。类似于JDBC。解耦API意味着如果API保持不变,则无需重新编译客户端,但实现已更改。
通常,有几个项目允许将每个项目都视为模块,这是一个导入其他模块的指定列表并形成分层层次结构的单元。这可以为软件系统提供更高质量,无需来回导入。下一代java将获得模块。
答案 2 :(得分:0)
首先使代码更易于重用。通过在不同的项目中打包不同的功能,可以更容易地找到您想要转移到另一个项目的功能(在这种情况下,您可以将整个IngotAPI导出到新项目)。 第二个测试。当每个项目将其自己的单元测试分开时,以及检查两个项目之间的集成的测试,更容易控制测试结果。
例如,如果IngotAPI开发得很好,它就不应该对Ingot项目有任何依赖性。这意味着如果您对Ingot项目进行任何更改,您不需要独立测试IngotAPI,因为它不会受到影响(高内聚力),您只需要测试Ingot,以及ingot使用IngotAPI的位置。 / p>
答案 3 :(得分:0)
IngotAPI似乎应该很容易从其他项目中引用。 也许它将来会在其他地方使用。
最后它并不重要,因为您也可以将其他项目中的类复制到最近的项目中。
答案 4 :(得分:0)
主要原因是,当您实施API时,您希望将其分发给潜在客户。通过划分两个(或更多)项目,您只能分发接口和业务对象,并自己保留实现。
这样,您就不必重新分配任何实施变更。