OSGi:何时使用组件框架以及何时自己创建对象
OSGi: when to use component framework and when to create objects yourself
我成为 AEM 开发人员已经将近一年了。我知道 AEM 使用 'Declarative Services component framework' 来管理 OSGi 组件的生命周期。
考虑一个场景,当我从一个包中导出一个包并从另一个包中导入该包时,我也可以在第二个包中的第一个包中创建 类 的对象。本例为进出口合同
我的问题是什么时候我应该使用组件框架来管理我的对象的生命周期以及什么时候通过在需要时创建它们来自己处理它。
如果您的对象是服务,那么毫无疑问,它们必须是 OSGi 组件。
对于其他事情,我的第一选择是 OSGi 组件,除非它们是像数据持有者或类似的东西这样的琐碎对象。
如果一个对象需要配置或引用 OSGi 服务,那么它显然也是一个 OSGi 组件。
一般来说,IMO 最好考虑服务并将您的包导出定义为允许其他包使用包服务的最小值。除非 bundle 明显是像 commons-io 这样的可重用库(举个简单的例子)。
在理想的设计中,您实际上无法从导出的包中创建对象;因为该包将只包含接口。这使其成为 "pure" 合同 (API) 出口。如果那里有 classes 可以直接实例化,那么它们就是实现 classes.
一般来说,最好只导出纯 API 并隐藏实现 class。主要原因有两个:
实施 classes 往往具有下游依赖性。如果你直接从实现 class 依赖到实现 class 那么你会得到一个非常大且脆弱的依赖图......最终该图将包含一个循环。事实上,它几乎是不可避免的。那时,您的应用程序不是模块化的,因为您无法独立部署或更改它的任何部分。
纯接口可以分析版本间的兼容性。作为 API 的消费者或提供者,您确切知道可以支持哪些版本的 API,因为 API 不包含可执行代码。但是,如果您依赖于某个实现 class,那么您永远不会真正知道它们何时会破坏兼容性,因为破坏可能发生在您无法轻易分析的可执行代码的深处。
我成为 AEM 开发人员已经将近一年了。我知道 AEM 使用 'Declarative Services component framework' 来管理 OSGi 组件的生命周期。
考虑一个场景,当我从一个包中导出一个包并从另一个包中导入该包时,我也可以在第二个包中的第一个包中创建 类 的对象。本例为进出口合同
我的问题是什么时候我应该使用组件框架来管理我的对象的生命周期以及什么时候通过在需要时创建它们来自己处理它。
如果您的对象是服务,那么毫无疑问,它们必须是 OSGi 组件。
对于其他事情,我的第一选择是 OSGi 组件,除非它们是像数据持有者或类似的东西这样的琐碎对象。
如果一个对象需要配置或引用 OSGi 服务,那么它显然也是一个 OSGi 组件。
一般来说,IMO 最好考虑服务并将您的包导出定义为允许其他包使用包服务的最小值。除非 bundle 明显是像 commons-io 这样的可重用库(举个简单的例子)。
在理想的设计中,您实际上无法从导出的包中创建对象;因为该包将只包含接口。这使其成为 "pure" 合同 (API) 出口。如果那里有 classes 可以直接实例化,那么它们就是实现 classes.
一般来说,最好只导出纯 API 并隐藏实现 class。主要原因有两个:
实施 classes 往往具有下游依赖性。如果你直接从实现 class 依赖到实现 class 那么你会得到一个非常大且脆弱的依赖图......最终该图将包含一个循环。事实上,它几乎是不可避免的。那时,您的应用程序不是模块化的,因为您无法独立部署或更改它的任何部分。
纯接口可以分析版本间的兼容性。作为 API 的消费者或提供者,您确切知道可以支持哪些版本的 API,因为 API 不包含可执行代码。但是,如果您依赖于某个实现 class,那么您永远不会真正知道它们何时会破坏兼容性,因为破坏可能发生在您无法轻易分析的可执行代码的深处。