虽然我是一名Java开发人员,但这是关于OSGi和基于Java的模块化的问题,这个问题确实适用于任何面向对象的3GL。
我开始掌握真正“模块化”开发的概念,并开始真正喜欢OSGi。我有史以来第一次开始考虑在非常精细,可重用的专用部署中部署jar。然而,这种新的思维方式引发了一些问题。
在基于组件的纯体系结构中,每个类都会受到震动吗?如果不是组件的粒度应该是多少?是否可以使每个组件可重用?
在确定模块化组件的粒度时,使用哪些“经验法则”?提前谢谢!
答案 0 :(得分:5)
我将主要从OSGi的角度回答这个问题。
恕我直言,区分组件和模块非常重要。 组件是一种编程工具:具有行为并可能为其他组件提供服务的东西。在实现方面,您使用OSGi的组件模型之一(例如Declarative Services)对组件进行编程。见http://wiki.osgi.org/wiki/Component_Models_Overview
模块是一种部署工艺:它是将组件和/或API打包成工件,可以复制并安装在各种运行时中。因此,隐式地,您可以在一个模块中打包多个组件,或者为每个组件创建一个模块。
事实上,模块内容很容易重构,因此您不必过于担心粒度:随着您获得OSGi的更多经验,您将找到适合您自己需求的级别。但请记住以下一般建议:
Import-Package
而不是Require-Bundle
来表达您的依赖关系。请参阅http://wiki.osgi.org/wiki/Use_Import-Package_instead_of_Require-Bundle