OSGi为什么重要:向模块化转移的主攻手

原创
开发 后端
OSGi是一个Java企业级开源框架,近年来得到了很多方面的关注。本文作者Patrick认为OSGi是过去20年间兴起的一种革命性的技术,因为它代表了长期软件开发发展中下一个合理的步骤。他评论OSGi的优势在于提供了标准的Java软件包,是从非模块化转移到模块化的重要技术。

【51CTO快译】本文为JavaLobby社区上的一篇文章。OSGi是一个Java企业级开源框架,近年来得到了很多方面的关注。看到很多博客文章都在询问OSGi为什么重要,OSGi的推广者Patrick Paulin写下了此文。如果你同很多人一样,也在环顾着OSGi使用量的增加,同时想知道它对你来说是否重要,那么请看他的答案。

51CTO编辑推荐:OSGi入门与实践全攻略

Patrick:我要以一个非常大胆的说法开始,即OSGi是在过去20年间兴起的最重要的技术之一。听起来虽然不算什么,但OSGi确实是一种革命性的技术。事实上,OSGi非常重要,因为它代表了长期软件开发发展中下一个合理的步骤。

OSGi的开端

为了能够让你理解我的意思,让我们回到20到30年前。那时候,面向对象语言刚开始流行,我们之所以采用面向对象语言的主要原因之一是,它能够让我们隐藏很多代码的实现细节。

从过程式语言到面向对象语言的转变,让我们能够开发类,定义访问权限,共享公共方法。

过程式语言到面向对象

其结果是,我们的大部分代码在其类外是不可见的。这对我们开发软件的方式产生了深刻的影响。通过接受这种明显的可见度限制,我们获得了极大的使用自由。我们可以自由地重用类,而不需要知道它们的实现细节。我们可以自由地重构我们的代码,而不必担心类的使用者。

你能想像如果开发软件而没有信息隐藏是多么痛苦吗?

OSGi的优势

现在设想如果不仅可以隐藏类的方法,还可以隐藏JAR中的整个类集,那将会是一种怎样的情形呢。设想JAR可以定义类运作的公共规则,这些规则将被应用于开发和运行时。设想我们可以获得信息隐藏的所有的优点(管理复杂性,代码重用,易测性,重构等)。

OSGi让这一切成为了可能。它提供了标准的Java软件包,作为一个新的信息隐藏单元。当我们的代码是运行在一个OSGi框架内时,JAR中的每个包对于使用者来说都可以可见或隐藏。

JAR包

就如同类可以用一组小的公共方法来描述其与使用者之间的规则,一个模块化的Jar文件(OSGi术语称bundle)用一组小的导出包来描述公共规则。大部分代码都隐藏在内部包中,对于其它JAR并不可见。

设想可以重命名类、分割或合并类、把类从一个包转移到另一个包、把整个包从一个JAR移动到另一个JAR,所有这些操作都不必担心会影响到JAR的使用者。这么多种类型的重构操作现在都不必再担心会出问题。基于包层次的信息隐藏给予我们施行重构的信心,让我们能够及时迎合用户的需求。

相关阅读:JAR文件包及jar命令详解

模块化不可避免

OSGi如果想获得成功,基于JAR层次的信息隐藏是不可避免的。在今后5到10年,我们将考虑是否有可能不采用这种机制。

目前,OSGi是我们不得不完成这一使命的唯一工具。幸运的是,OSGi是一个考虑周全、测试良好、基于标准的解决方案。我想不出任何开发OSGi替代品的理由(除了可能会修改它的名字)。OSGi就在这里,它工作良好,让我们使用它吧。

OSGi时代来临

Steve McConnell曾说过一句非常漂亮的话,这句活真正接触到了OSGi正努力实现的核心目标。

在Code Complete中,他写道:

“通过增加聚集粒度,软件开发已经在很大程度上取得了进步。”

因为这种聚集的粒度是如此重要,从非模块化转移到模块化,同从过程化转移到面向对象化同样重要。20年来,我们一直局限于使用类作为提取单元,现在正是向模块转移的时候,OSGi时代即将来临。

原文:Why is OSGi important by Patrick Paulin

【编辑推荐】

  1. 初探Java企业级开源框架OSGi
  2. 基于OSGi和Spring开发Web应用
  3. OSGi和Java企业级开发的未来方向
  4. 专题:Java基础教程
责任编辑:yangsai 来源: 51CTO.com
相关推荐

2010-03-24 08:34:44

OSGiJava模块化

2010-03-08 12:57:08

微软IT PAC模块化数据中心

2018-06-21 09:36:09

模块化数据中心集中化

2010-03-11 08:57:59

OSGi

2019-08-28 16:18:39

JavaScriptJS前端

2020-09-17 10:30:21

前端模块化组件

2020-09-18 09:02:32

前端模块化

2022-02-14 10:58:16

模块化数据中心数据中心

2022-09-05 09:01:13

前端模块化

2016-10-09 11:03:41

Javascript模块化Web

2009-09-16 16:35:08

OSGi是什么OSGi容器

2022-09-21 11:51:26

模块化应用

2013-08-20 15:31:18

前端模块化

2017-05-18 10:23:55

模块化开发RequireJsJavascript

2015-10-10 11:29:45

Java模块化系统初探

2022-03-11 13:01:27

前端模块

2018-10-25 15:20:17

区块链去中心化互联网

2010-05-28 10:31:28

模块化IT

2019-12-02 16:05:10

前端模块化JavaScript

2023-05-24 10:35:11

Node.jsES模块
点赞
收藏

51CTO技术栈公众号