你的api捆绑包依赖于另一个捆绑api是一个好习惯吗?

时间:2015-10-22 09:37:02

标签: java api osgi

我将我的服务包和我的api包分开了。在我的api包中,我有一个包含来自另一个api包的实体的实体。这是一个设计问题还是一个好的做法?

  1. BundleA-api:包含foo.Foo接口
  2. BundleB-api:包含bar.Bar接口(有一个Foo成员)
  3. BundleC-service:导入BundleB-api并提供实现bar.Bar接口的服务
  4. 我希望很清楚; - )

    谢谢,

3 个答案:

答案 0 :(得分:0)

如果您设法保持API自包含,那总是好的,但这并不总是可行的。所以我不认为依赖于另一个API总是一件坏事。

答案 1 :(得分:0)

为方便起见,您可能希望分发bundle-all.jar文件,而不仅仅是单独的文件。

答案 2 :(得分:0)

目标应该是使用基本的JDK类型尽可能地保持API的耦合。但是,有时您确实需要使用其他抽象或不想重复功能。正如设计中的大多数事情一样,它在相反的力量之间找到了最佳。在软件中,您希望最小化耦合并最大化内聚。

最小化API耦合的一个技巧是使用JDK中的共享类型。整数与字符串ID在这方面通常很有效。例如,在OSGi enRoute中,Authentication服务不返回UserAdmin服务的User对象,但它返回用户的String id。因此,身份验证服务可以与User Admin服务一起使用,但不会强制要求。潜在地,也可以使用另一个用户数据库,将选择留给服务的用户。