首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 OSGi 应用程序开发和工作的最佳实践 (3)

用 OSGi 应用程序开发和工作的最佳实践 (3)

5. 从实现中分离 API 构建 OSGi  bundle,一个最佳实践是将任何 API 类从实现类放入单独的 bundle。
原因如下
从实现类分离 API 类比较灵活。一个单独的 API bundle 使一个客户端可以使用任何实现提供商;此外,也可使多个提供商同时使用。如果没有这个分离,客户端 bundle 需要重启来连接一个新提供程序 bundle。
该最佳实践也可以减少 API bundle 包依赖性,因而减少不同 API 之间的循环依赖性。当两个 API 实现内部彼此使用 API 时,这很容易发生。
一旦 API 类放入一个独立的 bundle,确保没有实现包被导出是很重要的,API 实现是使用公共 API 作为 OSGi 服务发布的。
示例
图 6 中的场景展示了一个客户端 bundle,从一个没有分离这些包的提供商 bundle 导入 API 类和实现类,这个提供商 bundle 也导出实现类和 API 类。这是一个糟糕的实践,因为没有分离,也因为实现类被导出且不能作为服务公开。
图6.  设计糟糕的提供商 bundle ,其中 API 类和实现类是在同一 bundle 中另一个场景如图 7 所示,其中显示了一个客户端,从一个 bundle 中导入 API 包,从另一个中导入实现包。尽管 API 包和实现包已被分离,提供商仍然导出实现包,而不是作为服务公开该类。
图 7.  设计糟糕的提供商 bundle,其中 API 类和实现类已被分离 最后一个场景如图 8 所示,显示了最佳实践。提供商 bundle 已经分离了实现包和 API 包,此外,实现类也被作为 OSGi 服务公开。
图 8. 设计良好的提供商 bundle,其中 API 类和实现类已被分离
返回列表