系统架构设计师教程 第5章 5.6 基于构件的软件工程 笔记
5.6 基于构件的软件工程 ★★☆☆☆
基于构件的软件工程 (Component-Based Software Engineering,CBSE) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。
基于构件的软件系统中的构件可以是 COTS(Commercial-Off-The-Shelf) 构件,也可以是通过其他途径获得的构件(如 自行开发)。
5.6.1 构件和构件模型
一般观点认为构件是一个独立的软件单元,可以与其他构件构成一个软件系统。
用于CBSE 的构件应该具备以下特征。
(1)可组装型:对于可组装的构件,所有外部交互必须通过公开定义的接口进行。
(2)可部署性:软件必须是自包含的,必须能作为一个独立实体运行。构件总是二进制形式,无须在部署前编译。
(3)文档化;构件必须是完全文档化的,用户根据文档来判断构件是否满足需求。
(4)独立性:构件应该是独立的,应该可以在无其他特殊构件的情况下进行组装和部署,如确实需要其他构件提供服务,则应显示声明。
(5)标准化:构件标准化意味着在 CBSE过程中使用的构件必须符合某种标准化的构件模型。
构件模型定义了构件实现、文档化以及开发的标准。这些标准是为构件开发者确保构件的互操作性而设立的,也是为那些提供中间件的构件执行基础设施供应商支持构件操作而设立的。 目前主流的构件模型是Web Services 模型、 Sun公司的EJB 模型和微软的.N E T模型。
构件模型包含了一些模型要素,这些要素信息定义了构件接口、在程序中使用构件需要知道的信息,以及构件应该如何部署。
(1)接口。构件通过构件接口来定义,构件模型规定应如何定义构件接口以及在接口定义中应该包含的要素,如操作名、参数以及异常等。
(2)使用信息。为使构件远程分布和访问,必须给构件一个特定的、全局唯一的名字或句柄。构件元数据是构件本身相关的数据,比如构件的接口和属性信息。用户可以通过元数据找到构件提供的服务。构件是通用实体,在部署的时候,必须对构件进行配置来适应应用系统。
(3)部署。构件模型包括一个规格说明,指出应该如何打包构件使其部署成为一个独立的可执行实体。部署信息中包含有关包中内容的信息和它的二进制构成的信息。
构件模型提供了一组通用服务,包括以下两种。
● 平台服务,允许构件在分布式环境下通信和互操作。
● 支持服务,这是很多构件需要的共性服务。例如,构件都需要的身份认证服务。
5.6.2 CBSE 过程
CBSE过程是支持基于构件组装的软件开发过程,需要考虑构件复用的可能性,以及在开发和使用可复用的构件中所涉及的不同过程活动。成功的构件复用需要一个经过裁剪、适配的开发过程,以便在软件开发过程中包含可复用的构件。
CBSE过程中的主要活动包括:
(1)系统需求概览;
(2)识别候选构件;
(3)根据发现的构件修改需求;
(4)体系结构设计;
(5)构件定制与适配;
(6)组装构件,创建系统。
5.6.3 构件组装
构件组装是指构件相互直接集成或是用专门编写的“胶水代码”将它们整合在一起来创造一个系统或另一个构件的过程。
常见的组装构件有以下3种组装方式。
1.顺序组装
通过按顺序调用已经存在的构件,可以用两个已经存在的构件来创造一个新的构件。顺序组装的类型可能适用于作为程序元素的构件或是作为服务的构件。需要特定的胶水代码,来保证两个构件的组装:上一个构件的输出,与下一个构件的输入相兼容。
2.层次组装
一个构件直接调用由另一个构件所提供的服务。被调用构件的“提供”接口必须和调用构件的“请求”接口兼容。 如果接口相匹配,则调用构件可以直接调用被调用构件,否则就需要编写专门的胶水代码来实现转换。
3.叠加组装
两个或两个以上构件放在一起来创建一个新构件,这个新构件合并了原构件的功能,从而对外提供了新的接口。外部应用可以通过新接口来调用原有构件的接口, 而原有构件不互相依赖,也不互相调用。这种组装类型适合于构件是程序单元或者构件是服务的情况。
组装构件时,可能会面临接口不兼容的问题,即所要组装的构件的接口不一致。一般会出现3种不兼容情况。
(1)参数不兼容。接口每一侧的操作有相同的名字,但参数类型或参数个数不相同。
(2)操作不兼容。提供接口和请求接口的操作名不同。
(3)操作不完备。一个构件的提供接口是另一个构件请求接口的一个子集,或者相反。
针对上述不兼容情况,必须通过编写适配器构件来解决不兼容的问题,适配器构件使两个可复用构件的接口相一致;适配器构件将一个接口转换为另外一个接口。
当用户选择组装方式时,必须考虑系统所需要的功能性需求、非功能性需求,以及当系统发生改变时,一个构件能被另一个构件替代的难易程度。