显著节约成本的重用一直是软件工程的“圣杯”。从复制和粘贴源代码到类层次上的细粒度(fine-grained)复用,再到框架和体系结构层次上的粗粒度(coarse-grained)大规模复用,复用技术已经逐渐成熟。而在体系结构上的显著节约成本的重用应该成为所有开发项目都致力的一个战略性活动。在读过这篇文章后,你将会明白运用模式及IBM Rational XDE V2003 如何创建你自己的可复用框架。
注释: 所有的模型和代码都使用XDE v2003 for .NET来描述。类似的的框架可以在J2EE环境下建立。代码语言采用C#,所以对于C++或JAVA程序员都应该是清晰易懂的。
复用体系结构
大约二十多年前,软件工程业被比喻成旧时代的打铁。在那个时候,当你想建一座房屋,要去铁匠铺找所有需要使用的金属部件,从固定在墙上的烛台到锁门的铰链,甚至小小的钉子,都需要一个一个地手工来制造。这正如当时的软件工程--几乎所有的代码都是新的,每项规则和每个设计都是专门为正在构建的系统而编写,而且以后它们可能又需要重新被构建。代码复用(当时唯一可尝试的复用方式)可以被看成是在五金商店购买成百上千钉子,而不是自己亲手打造每一个钉子。这样,使用更为可靠的代码就可以缩短开发周期。
在20世纪80年代中期,经济可行的面向对象编程语言的引入,诸如C++(Smalltalk已出现,但并没有在业务环境中得到广泛使用),通过类直接支持代码的复用。复用方面已取得了一些重要的成果,但是预测中的“大跃进”并没有如期而至。这是由于开发者常常不能决定哪些类应当被复用。的确,一些代码的复用,使将来的代码编写更为快捷、可靠。但是,直到可视化建模和代码生成工具的出现,开发者才开始看到设计复用—概念及思想--带来了比代码复用更大的经济回报。他们意识到在体系结构及设计层次上的复用将带来相当巨大的收益。
现在打铁匠的类比法更具有说服力。随着设计模式的发明,而且从设计模型中产生代码非常简单,所以复用设计便成为一种理念。现在,一改过去复用“钉子”的作法,我们正在复用基础和墙壁,这类似于预先建造房屋的组成部分。我们不再是房子的建筑者,而是房子的设计者。不再需要请众多邻居帮忙钉木板建房,你现在可以直接买墙壁和屋顶,然后在几个小时之内就能够完成装配。
体系结构框架也是如此,为什么不从已有体系结构的20%,或者30%,甚至60%来开始呢?为什么不在应用中使用相同的构架,以便更易于软件工程师在工作中连续的应用?微软建立MFC类库,Sun提出Java和J2EE标准,他们都在作这方面的努力,而且,Microsoft目前又在尝试使用.NET来实现这种思想。正如他们90年代所作,更简单快捷、代价更低,并且更可靠地基于J2EE来构建Web应用。换而言之,像J2EE这样的框架为构建Web应用提供了经济显著的复用。
"优质、快速、低成本:只能同时选择其中两个"是一个旧的工程定律,其中的一个必须为另外两个而作出牺牲。但是复用体系结构框架是降低风险的一种途径,并且同时兼顾了这三个原则。
快速体系结构
大规模的工业体系结构,比如J2EE,已积累了大量的经验与资源,它影响着项目、公司和工业之间的可复用性。在创建体系结构上投入大量的努力,仍然能带来显著的投资回报(ROI)。但是如果我们不使用J2EE, .NET,或者一些其它的行业体系框架会怎样呢?或者要是我们的组织需要一个建立在J2EE或.NET之上的可复用体系结构,那又会怎样呢?我们可能只复用这个体系结构几次,或者几十次,而不是数千次,我们需要的是建立健壮的、可利用的架构能力。但是,快速却不够熟练的构建架构会给我们带来对于我们付出最小化的回报。
本文中,我们将使用设计模式快速建立框架,这是一个模式的模式。在XDE中应用这些模式将会产生大量代码。所以,实现这个框架的大多数代码不需要人工介入。即使这是使用模式所带来的唯一好处,我们仍然会有很多可用的代码。几行手写“粘合代码”将起到一个连接的作用。最后,我们将有一个3-tier 体系结构,它在可重复、可预测和健壮(基于组件)的框架中处理业务逻辑。这个框架可以复用(以单一模式应用,而不是重复敲入代码)来更快地建立其它应用架构。曾经从事这个框架的开发者在以后使用相同框架的应用时,不必再走弯路。框架的改进或加固会被快速地在应用间传播,这只需要通过重复应用模式即可,而不必多次手工修改代码。