软件构件
构件又称为组件,是一个自包容、可复用的程序集。(类似nuget中的包)
构件是一个程序集,它可能会以各种方式体现出来,如源程序或二进制代码。
构件向外提供统一的访问接口,构件外部只能通过接口来访问构件,而不能直接操作构件的内部。
构件两个最重要的特性是自包容与可重用
软件构件的组装模型
随着构件技术的发展,人们开始尝试利用软件构件进行搭积木式的开发,即构件组装模型。
在构件组装模型中,当经过需求分析定义出软件功能后,将对构件的组装结构进行设计,将系统划分成一组构件的集合,明确构件之间的关系。
在确定了系统构件后,则将独立完成每一个构件。
构件组装模型的一般开发过程如下图所示
构件组装模型的优点如下:
1、构件的自包容性让系统的扩展变得更加容易
2、设计良好的构件更容易被重用,降低软件开发成本
3、构件的粒度较整个系统更小,因此安排开发任务更加灵活,可以将开发团队分成若干
构件组装模型也有明显的缺点:
1、对构件的设计需要经验丰富的架构设计师,设计不良的构件难以实现构件的优点,降低构件组装模型的重用度
2、在考虑软件的重用度时,往往会对其它方面做出让步,如性能等。在我过去的开发经验中,组件之间的数据交互也是一个不小的问题。
3、使用构件组装应用程序时,要求程序员能熟练地掌握构件,增加了研发人员的学习成本。在我过去使用的框架中,Prism就实现了组件式开发,学习Prism也花了我一些时间。
4、使用三方构件库时,三方库的质量会影响到软件的质量,而这部分往往也是开发团队难以控制的。所以这一块,尽量选择商业成熟的组件,开源的组件也尽量选用使用人数多的版本。
基于构件的软件工程
基于构件的软件工程(Component-Based Software Engineering,CBSE)是一种基于分布对象、强调通过可复用构件设计与构造软件系统的软件复用途径。
CBSE正在改变大型软件系统被开发的方式。CBSE体现了Fred Brooks等人支持的“购买,而非建造”的思想。就像早期的子例程将程序员从思考细节中解放出来一样,CBSE将考虑的重点从编程软件移到组装软件系统。
构件和构件模型
基于CBSE的构件应该具备以下特征
1、可组装型:所有外部交互必须通过公开定义的接口进行
2、可部署性:能作为一个独立实体在构件平台上运行
3、文档化:完全文档化,用户根据文档判断是否满足需求
4、独立性:具备独立性,可以在无其它特殊构件的情况下进行组装和部署
5、标准化:CBSE过程中使用的构件必须符合某种标准化的构件模型
构件模型的一些模型要素:
1、接口:构件通过接口来定义,构件模型规定应如何定义构件接口以及在接口定义中包含的要求,如操作名、参数以及异常等
2、使用信息:为使构件远程分布和访问,必须给构件一个特定的、全局唯一的名字或句柄。
3、部署:构件模型包括一个规格说明,指出应该如何打包构件使其部署成为一个独立的可执行实体。
CBSE过程
CBSE过程中的主要活动包括:
1、系统需求概览
2、识别候选构件
3、根据发现的构件修改需求
4、体系结构设计
5、构件定制与适配
6、组装构件、创建系统
CBSE过程与传统的软件开发过程存在几点不同:
1、CBSE早期需要完整的需求,以便尽可能多地识别出可利用的构件。而增量式的开发中,早期并不需要完整的需求
2、在过程早期阶段根据可利用的构件来细化和修改需求。如果可利用的构件不能满足用户需求,就应该考虑由复用构件支持的相关需求。通过劝说用户修改需求,以便能节省开支且快速开发系统。
3、在系统体系结构设计完成后,会有一个进一步的对构件搜索及设计精化的活动。可能需要为某些构件寻找备用构件,或者修改构件以适合功能和架构的要求。
4、开发就是将已经找到的构件集成在一起的组装过程。其中包括将构件与构件模型基础设施集成在一起,有时还需要开发适配器来协调不匹配的构件接口,可能还需要开发额外的功能。
构件组装
1、顺序组装: 通过按顺序调用已存在的构件,生成一个新的构件
2、层次组装: 一个构件直接调用另一个构件所提供的服务
3、叠加组装:两个或两个以上的构件放在一起创建一个新的构件时,这个新构件合并了原构件的功能,从而对外提供了新的接口。
构件组装中经常会面临接口不兼容的问题,如果一个构件的提供接口是另—个构件请求接口的一个子集,则属于操作不完备的情况。


还不快抢沙发