直观地说,软件架构复用就是在软件的架构层设计中套用现有的优势架构。软件架构复用可基于特定的软件开发工具(平台),因为它们具有一定的积累功能;也可基于特定应用领域,如电子政务、电子商务,因为同一应用领域的软件系统具有相似的功能需求。
软件架构复用不仅可以提高软件开发的效率,也有利于软件系统开发的标准化。此外,共享公共架构还有利于软件系统之间的互操作。软件架构复用的成功案例使得人们开始关注软件架构与业务逻辑之间的相对独立性。通常架构主要解决构件的接口匹配问题和构件间的通信问题,而业务逻辑则主要决定构件的操作内容。这意味着我们可以分别完成架构与业务逻辑的设计与开发,再把两个结果合并起来。粗略地说,这就是面向架构的软件开发。面向架构的软件开发可能有不同的实现步骤。举个例子,我们可以先采用架构设计语(ArchitecturalDesignLanguage, ADL) 完成软件架构设计,再对其进行编译,编译器的输出将包括构件骨架代码(源码)和连接器代码等。在完成架构的设计与编译之后,就可以向构件骨架代码中加入操作代码,形成最终的编程结果。
伴随着软件产业的发展使可复用、具有某种优势的架构及上述实现架构代码的逐渐被固定,使其商业化,这就是最原始的软件框架(frarnework)它实际上是-种软件半成品,允许客户添加可插拔的定制构件来满足细化的需求。标准化是软件框架的另一个主要的来源,如果套用图1给出的模型,这类框架与相关标准/协议之间的关系就相当于软件工具与方法论之间的关系。软件框架的第三个来源是软件工具。实际上,许多软件工具,特别是集成开发平台,都为开发者提供预定义的框架,它们的特点是带有许多自动生成的源代码“骨架”,可以让程序员直接在其中添加客户化内容。不仅如此,有的集成开发环境,例如微软的VC++集成开发环境还能够支持用户通过某种面向架构的编程来创建定制的框架。这些框架在开发环境中保留下来,与预定义的框架一样可以复用。
图1:软件工程的工具模型
显然,软件框架复用与软件架构复用的区别在于前者的复用内容除了架构之外,还有代码。实际上,软件架构的复用往往包含相关软件框架的复用。如上所述,许多软件框架就是为了固化某个架构而专门开发的“大型积木块”(与其想方设法去描述一个架构, 不如直接给出实现该架构的关键代码)。软件框架的复用降低了复用优势架构所需要的代价,也提高了软件开发效率与开发质量。根据框架在软件整体架构中所处位置的不同层次,常用的软件框架分为支撑框架和应用框架等。应用框架固化的是应用层软件模块的优势结构,如JavaEE平 台上的Struts框架。应用框架中分为通用框架和领域框架,领域框架只见于特定的应用领域,而通用框架则适用于各种系统。在应用系统与基础设施两只之间支撑框架起到承上启下的作用, 支撑框架向应用系统提供标准的应用接口和支持多种基础设施。
值得指出的是,软件框架的大量使用对于软件架构复用也有不利的一面。这有两个原因:其一是因为框架-般比较大,灵活性相对较差,利用框架搭建的架构的可复用性难免因此受到局限;其二是因为框架一般由平台提供,利用框架搭建的架构通常具有平台依赖性,即使在同-种平台上,由于版本更替也可能造成某些框架被淘汰,与之相关的架构即使保存下来也很难再有使用的机会。不仅如此,许多软件框架,特别是一些软件开 发平台提供的框架,还掩盖了软件系统架构的核心部分,它们的使用不仅限制了应用层开发的创新空间,也给软件系统的维护,特别是前面提到的适应性维护和完善性维护,增加了难度。