2011-10-03 43 views
1

尽管我是一名Java开发人员,并且这个问题涉及到根据Java的OSGi和模块化,但这个问题确实适用于任何面向对象的3GL。基于组件的体系结构的粒度

我开始掌握真正的“模块化”开发的概念,并开始真正喜欢OSGi。我有史以来第一次开始考虑以非常细粒度,可重用的专业化部署来部署罐子。然而,这种新的思维模式激起了一些问题。

在纯基于组件的体系结构中,每个类都会被破坏吗?如果不是组件应该如何精细化?每个组件都可以重复使用吗?

确定模块化组件的粒度应该如何使用时,有哪些“经验法则”?提前致谢!

回答

5

我打算主要从OSGi的角度回答这个问题。

恕我直言,重要的是要区分组件模块。 A 组件是一种编程工件:具有行为并可能为其他组件提供服务的东西。在实施条款中,您使用OSGi的组件模型之一(如声明式服务)编程组件。见http://wiki.osgi.org/wiki/Component_Models_Overview

模块是一个部署假象:它是部件和/或API的包装成能够围绕被复制和安装在各种运行时间伪影。因此可以隐式地将多个组件打包在一个模块中,或者为每个组件创建一个模块。

事实上,模块内容很容易重构,因此您不必过多担心粒度:随着您获得更多OSGi体验,您将找到适合自己需求的适当级别。但请记住以下一般建议:

  1. 将包装在同一模块中的组件重新部署在一起。如果其中一个组件比其他组件更频繁地被释放,那么您可能通过反复释放未改变的组件来创建比所需组件更多的工作(例如,由下游用户进行测试),仅仅是因为它们碰巧与变化组件相同。
  2. 一个不能部署半个模块。因此,模块中的所有组件应密切相关,因此您不希望用户希望“如果我只能在此模块中部署组件的某些某些”...
  3. API变化非常缓慢和谨慎,而组件频繁更换。出于这个以及其他原因,API最好部署在他们自己的API捆绑包中。请参阅http://wiki.osgi.org/wiki/Separate_API_from_Implementation
  4. 为了确保模块内容可以在不中断用户的情况下重构,请始终使用Import-Package而不是Require-Bundle表示您的依赖关系。请参阅http://wiki.osgi.org/wiki/Use_Import-Package_instead_of_Require-Bundle
+0

@Mara这里是基于组件开发的链接。 http://en.wikipedia.org/wiki/Component-based_software_engineering –

+0

哇!神奇的答案@尼尔!感谢您的澄清! – IAmYourFaja

相关问题