【资讯】OSGi为什么重要:向模块化转移的主攻手
Patrick:我要以一个非常大胆的说法开始,即OSGi是在过去20年间兴起的最重要的技术之一。听起来虽然不算什么,但OSGi确实是一种革命性的技术。事实上,OSGi非常重要,因为它代表了长期软件开发发展中下一个合理的步骤。
OSGi的开端
为了能够让你理解我的意思,让我们回到20到30年前。那时候,面向对象语言刚开始流行,我们之所以采用面向对象语言的主要原因之一是,它能够让我们隐藏很多代码的实现细节。
从过程式语言到面向对象语言的转变,让我们能够开发类,定义访问权限,共享公共方法。
其结果是,我们的大部分代码在其类外是不可见的。这对我们开发软件的方式产生了深刻的影响。通过接受这种明显的可见度限制,我们获得了极大的使用自由。我们可以自由地重用类,而不需要知道它们的实现细节。我们可以自由地重构我们的代码,而不必担心类的使用者。
你能想像如果开发软件而没有信息隐藏是多么痛苦吗?
OSGi的优势
现在设想如果不仅可以隐藏类的方法,还可以隐藏JAR中的整个类集,那将会是一种怎样的情形呢。设想JAR可以定义类运作的公共规则,这些规则将被应用于开发和运行时。设想我们可以获得信息隐藏的所有的优点(管理复杂性,代码重用,易测性,重构等)。
OSGi让这一切成为了可能。它提供了标准的Java软件包,作为一个新的信息隐藏单元。当我们的代码是运行在一个OSGi框架内时,JAR中的每个包对于使用者来说都可以可见或隐藏。
就如同类可以用一组小的公共方法来描述其与使用者之间的规则,一个模块化的Jar文件(OSGi术语称bundle)用一组小的导出包来描述公共规则。大部分代码都隐藏在内部包中,对于其它JAR并不可见。
设想可以重命名类、分割或合并类、把类从一个包转移到另一个包、把整个包从一个JAR移动到另一个JAR,所有这些操作都不必担心会影响到JAR的使用者。这么多种类型的重构操作现在都不必再担心会出问题。基于包层次的信息隐藏给予我们施行重构的信心,让我们能够及时迎合用户的需求。
模块化不可避免
OSGi如果想获得成功,基于JAR层次的信息隐藏是不可避免的。在今后5到10年,我们将考虑是否有可能不采用这种机制。
目前,OSGi是我们不得不完成这一使命的唯一工具。幸运的是,OSGi是一个考虑周全、测试良好、基于标准的解决方案。我想不出任何开发OSGi替代品的理由(除了可能会修改它的名字)。OSGi就在这里,它工作良好,让我们使用它吧。
OSGi时代来临
Steve McConnell曾说过一句非常漂亮的话,这句活真正接触到了OSGi正努力实现的核心目标。
在Code Complete中,他写道:
“通过增加聚集粒度,软件开发已经在很大程度上取得了进步。”
因为这种聚集的粒度是如此重要,从非模块化转移到模块化,同从过程化转移到面向对象化同样重要。20年来,我们一直局限于使用类作为提取单元,现在正是向模块转移的时候,OSGi时代即将来临。