c语言项目模块化的优势,模块化编程的优点与实现原理概述(2)

模块化应用程序

针对分布式开发的挑战,其技术解决方案就是模块化。在一大块紧密耦合的代码中,每个单元都可能与其他单元进行直接的接口。而模块化应用则正相反,它由小块的、分散的代码块组成,每一块都是独立的。于是,这些代码块可以由不同的团队进行开发,而他们都有各自的生命周期和时间表。最终的成果则可以由另一个独立的个体,即发行者,进行集成。

对于Java而言,将一组类库放在Java类路径上并运行一个应用程序在很早以前就实现了。NetBeans平台在类库的管理方面已经走的相当远:它积极的参与类库的加载过程,并强制每一个类库都满足其他类库对自己的最低版本需求。这样的类库被称为模块。NetBeans模块系统是一个运行时容器,它确保了系统在运行时的完整性。

版本控制

将应用程序分解为独立的类库,这带来了一个新的挑战——我们需要确保这些互不依赖的零件们能够在一起工作。这个问题有多种解决方案,而最流行的一种就是版本控制。每一块模块化应用都有一个版本号,常用杜威十进制格式表示,比如1.34.8这种数字组合。新版本的发布带来增加的版本号,比如1.34.10,1.35.1,或者2.0。其实仔细想来,使用增长的版本号来代表两个版本的复杂软件之间的不同是挺荒谬的。不过这种方法解释起来很简单,而且它的流行也说明了这种方法是十分可行的。

一个模块系统的另一个特点是外部依赖的声明。很多组件对外部条件有一定需求。比如说,一个模块系统中的组件可能需要一个XML解析器,或者需要安装某种数据库驱动,或者需要某种文本编辑器或者浏览器才能工作。对于每一个需求,另外一个模块可以指定其接口的特定版本号。即使对外部类库的依赖性极低,但每一个Java程序都对Java本身有版本要求。一个真正的模块系统可以指定理想的最低JDK版本。一个模块可能会有JDK>=1.5,xmlparser>=3.0,webbrowser>=1.5这样的版本需求。在运行时,启动应用的模块代码的依赖条件需要被满足,即,XML解析器在3.0版或以上,浏览器在1.5版或以上,如此这般。NetBeans模块系统正是这样的。使用依赖模式来维持模块系统中组件之间的依赖性有一个大前提,那就是我们必须遵循一系列的规则。第一个规则是向后兼容性:如果新版本发布,那么所有在之前版本下可建立的契约也必须能够在新版本下工作。这一点说起来很容易,但实现起来没那么容易。第二个规则是,系统中的组件需要准确的说明它们需要什么。当一个模块的依赖性产生改变的时候,它必须要说出来,这样系统才能够准确的确认这些依赖性是否被满足。因此,如果一个模块系统产生了对新功能的依赖性,比如一个HTML编辑器,那么你便需要定义这个新的依赖性(比如,htmleditor>=1.0)。同时如果你开始使用一个新的HTML编辑器组件的接口,而这个接口在1.7版之后才有,那么你需要更新你的依赖型需求到这个组件的1.7版本:htmleditor>=1.7。在NetBeans模块系统中,第二个规则在实践当中是相对容易遵循的,因为一个模块的编译时类路径仅仅包括有依赖性声明的模块,而没有依赖性声明的模块是不会被编译的。

二级版本信息

之前我们有关版本控制方法的讨论针对的是类库的规范版本。规范版本描述了该类库当中的公共API的一个特定快照。

某些版本的类库会不可避免的遭遇不得不修复的bug。因此,二级版本的识别也应该与组件关联起来,那就是这个组件的实现版本。与规范版本不同,一个实现版本往往用“Build20050611”这样的字符串进行标注,因此只能通过等式来判定。这就提供了一个二级识别机制,这个机制可以用来决定某个特定的代码模块是否有必须修复的bug。我们知道,在3.1规范版本中存在的bug未必会在3.2版本或者3.1版本的其他实现版本中存在,因此,出于bug修复或某些特殊处理的需求,将实现版本与类库关联起来是十分有用的。

依赖性管理

NetBeans IDE是一个模块化应用。它的模块——即组成它的那些类库——在运行时被查知并加载。它们可以安装小块小块的功能,如组件,菜单项或服务等;它们可以在启动时运行代码,进行程序初始化;它们可以通过声明式注册机制把平台和IDE提供的各个部分注册为服务并在需要时将其初始化。NetBeans模块系统使用安装组件的声明依赖性为每个模块的类路径进行父类路径配置,并在模块加载类的时候决定在哪些JAR文件当中搜索。这样确保了模块类路径当中不存在任何不属于其依赖树的模块JAR,并强制确保每个组件都有声明式依赖性。一个没有声明依赖性的模块将无法从其他模块中呼叫代码,而当依赖性没有被全部满足时,其他模块将不会加载。

原文:The Benefits of Modular Programming

作者:Tim Boudreau,Jaroslav (Yarda) Tulach和Geertjan Wielenga

【责任编辑:杨赛 TEL:(010)68476606】

内容导航

第 1 页:分布式开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值