类库、框架、模式,以及模型集成式计算是其它一些正在被应用于复用软件和提高生产率的技术。本节比较框架和其它的一些技术,说明它们的相似性和差异,并且显式可怎样结合这些技术来增强网路化应用的系统化复用。
1,框架和类库
框架和类库是相互补充的。
类库是第一代面向对象开发技术,与函数库相比,类库通常能更为有效地支持小规模的复用,因为类强调了“数据”和“在数据上进行操作的方法”的内聚。
框架是第二代开发技术,在若干方面扩充了类库的优势。最重要的是,框架中的类会进行协作,为一组相关应用提供可复用的架构。框架中的类协作产生“半完成”的应用。
C++标准库是类库的好例子;尽管它们被复用于许多应用领域,但它们相对来说是低级的。应用开发者要负责编写大量的“胶水代码”,执行大部分应用控制流和类集成逻辑。
类库往往是被动的[1];框架则是主动的[2]。
框架聚焦于特定的领域,而类库满足最广泛的开发需求。
2,框架和组件
框架和组件是高度协作的,谁也不处于从属地位[4]。
组件是实现特定的一个或一组服务的软件系统的一个被封装的部分[3]。
可以把组件插放在一起,或是为其编写脚本来形成完整的应用。
组件使得“移植和重新分布特定的服务,以适应新的环境”变得更为容易,同时又保持关键的应用属性,比如安全性和可用性[5]。
与框架相比,组件在词法和空间上的耦合更小[6]。
3,框架和模式
使常用的模式和模式语言具体化,并且重构常见的实现角色,框架可帮助开发者避免对标准的产品制品进行重新发明。
对于复杂主题有关的设计挑战[7],由于它们常常不依赖于特定的应用需求,开发者借助模式来克服它们:设计模式[8]、架构型模式[9]、模式语言[10]。
传统上,模式和模式语言深藏在专家头脑中,或者系统源代码中[11]。
4,框架和模型集成式计算
模型集成式计算(MIC)与框架、组件及模式的结合是一个活跃的研究领域。
MIC使用针对特定领域的建模语言来系统地设计软件,开发环境包括针对特定领域的模型分析和基于模型的程序综合工具[12]。
如果适当实现,这些技术可以:解放API依赖,即使API被取代,模型可被复用;生成高度可靠的代码;更快速地建立原型;改善一致性和质量。
CASE工具在基于模型的开发和代码综合方面所进行的早期努力通常都无法实现其潜能,因为:1,生成代码低效、难以优化、依赖性强;2,难以获得往复的工程设计;3,首先于平台和编程语言;
MIC继承面向对象框架,有助于解决早期CASE工具的问题,因为建模工具无须生成所有的代码,大部分应用可以从可复用的、已预先验证的框架类组合而得。
[1] 被动的含义:因为它们(类库)通过从调用它们的方法的应用那里借用线程来执行它们的处理(简单点说:将参数发给类库,才能执行)。结果,开发者必须持续地重写大量的控制逻辑,才能把各个可复用的类绑定到一起,形成完整的应用。
[2] 主动的含义:它们(框架)通过多种回调驱动的事件处理模式来引导控制流,并且管理着应用的控制流,与被动的类库相比,它们可以代表应用进行更广泛的活动。(想想MFC和STL吧!)
[3] 常见的组件:ActiveX、COM对象、.Net Web Services、Enterprise JavaBeans、CORBA Component Model(CCM)。
[4] ACE框架可以被用于开发较高级的应用组件,而后者的接口又为框架的内部类结构提供了Facade。组件也可以在黑箱框架中被用作可插式策略。
[5] 举个例子:组件可以在容器的上下文中实现商业应用逻辑。容器允许其组件访问由底层的中间件平台提供的资源和服务。此外,应用服务器实例化和管理容器,应用服务器还可以将与组件相关联的元数据Metadata所提供的指令用于配置和连接组件。(这些术语是如此熟悉,以至于yathing想起了J2EE平台开发的相关技术)组件、容器、配置,共同组成了Application Server。
[6] 通过Proxy、Broker(代理、经纪)模式,组件可以被分不到网络各处的服务器上,应用组件的时候,不需要子类化(对比一下MFC框架,写一个对话框还需要构建一个子类)。
[7] 比如:连接管理(Connection Management)、服务初始化(Service Initialization)、分布(Distribution)、并发控制(concurrency Control)、流控制(Flow Control)、错误处理(Error Handling)、事件循环集成(Event Loop Integration)、可靠性(Dependability)。
[8] 为软件系统提炼要素以及它们之间的关系
[9] 软件系统的基础性的、总体的结构组织,并且提供一组预定义的子系统,规定它们的责任,并为组织它们之间的关系提供指导。
[10] 为软件开发问题定义词汇表,提供有序解决问题的步骤。
[11] JAWS是使用ACE框架构建的自适配Web服务器,模式帮助开发者克服在开发兵法服务器时常见的设计挑战:封装低级的操作系统API、解除“事件多路分离和连接管理”与“协议处理”的耦合,通过多线程提高服务器性能,使服务器线程开销降至最低,有效的使用异步IO,增强服务器可配置性(yathing:要想真正体会这些,1,读POSA2;2,阅读源代码)。
[12] 目前流行的MIC例子:Generic Modeling Environment(GME)和Ptolemy(用于实时和嵌入式领域),基于OMG Model Driven Architecture(MDA)的UML/XML工具(用于商业领域)。