【愚公系列】软考高级-架构设计师 083-基于构件的软件工程
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
基于构件的软件工程(CBSE)是一种软件开发方法,通过重用现有的软件构件来构建系统,从而提高开发效率和软件质量。这种方法强调软件系统的模块化设计和构件的复用,使得软件开发过程更加高效和灵活。
应用场景
-
企业软件开发:
- 在企业级软件开发中,通过重用构件可以快速构建复杂的业务应用,减少开发周期。
-
嵌入式系统:
- 在嵌入式系统中,基于构件的方法有助于开发高度模块化和可定制的系统。
-
云计算和微服务架构:
- 在云计算和微服务架构中,基于构件的设计思想有助于实现高效的服务部署和管理。
🚀一、基于构件的软件工程
🔎1.概念
基于构件的软件工程(Component-Based Software Engineering, CBSE)是一种基于分布对象技术的方法,强调通过可复用构件设计与构造软件系统。CBSE体现了“购买而不是重新构造”的哲学,将软件开发的重点从程序编写转移到了基于已有构件的组装。
🦋1.1 构件的特征
用于CBSE的构件应该具备以下特征:
-
可组装性:
- 构件的所有外部交互必须通过公开定义的接口进行,确保其能够与其他构件正确协作。同时,构件应对自身信息的外部访问进行控制,确保数据的安全性和完整性。
-
可部署性:
- 软件构件必须是自包含的,可以作为一个独立实体在构件平台上运行。构件通常以二进制形式存在,无需在部署前重新编译。
-
文档化:
- 构件必须完全文档化,用户可以根据文档判断构件是否满足其需求。文档应详细描述构件的功能、接口和使用方法。
-
独立性:
- 构件应该是独立的,能够在无需其他特殊构件的情况下进行组装和部署。如果确实需要其他构件提供服务,则应明确声明这些依赖关系。
-
标准化:
- 构件必须符合某种标准化的构件模型。标准化模型定义了构件的实现、文档化和开发标准,确保构件的一致性和互操作性。
🦋1.2 构件模型要素
构件模型包含以下要素:
-
接口:
- 构件通过接口来定义,接口描述了构件提供的操作、参数以及可能的异常。构件模型规定了如何定义接口及其应包含的要素。
-
使用信息:
- 为了实现构件的远程分布和访问,必须给构件分配一个特定的、全局唯一的名字或句柄。构件元数据包含构件的接口和属性信息,这些信息对于构件的使用和集成至关重要。
-
部署:
- 构件模型包括一个规格说明,指出如何打包构件使其成为一个独立的可执行实体。部署信息中包含有关包内容和二进制构成的信息,确保构件可以顺利部署和运行。
基于构件的软件工程(CBSE)通过使用标准化、文档化、独立且可部署的构件,提高了软件开发的效率和质量。CBSE方法将重点放在构件的选取和组装上,而不是从头编写代码,从而实现了软件系统的快速构建和高效维护。
🔎2.被构件使用的通用服务
构件模型提供了一组被构件使用的通用服务,这些服务主要包括以下两种:
-
平台服务:
- 平台服务允许构件在分布式环境下进行通信和互操作。这些服务确保不同构件之间可以无缝协作,无论它们部署在何处。
-
支持服务:
- 支持服务是许多构件共需要的通用服务。这些服务包括但不限于:
- 身份认证服务:确保只有经过认证的用户或系统能够访问构件。
- GPS服务:提供位置信息,供需要地理定位功能的构件使用。
- 支持服务是许多构件共需要的通用服务。这些服务包括但不限于:
-
中间件服务:
- 中间件负责实现共性的构件服务,并提供这些服务的接口。通过中间件,构件可以方便地调用各种通用服务,简化开发过程并增强系统的整体功能。
构件模型通过平台服务和支持服务提供了构件所需的通用功能。这些服务由中间件实现,并通过标准接口提供给构件使用,从而确保构件能够在分布式环境中高效互操作,并具备必要的共性功能。
🔎3.主要活动
CBSE过程是支持基于构件组装的软件开发过程,主要包括以下六个活动:
-
系统需求概览:
- 确定系统的整体需求和功能需求,概述系统的目标和预期功能,为后续活动提供基础。
-
识别候选构件:
- 在需求概览的基础上,识别可以满足这些需求的现有构件。分析市场上可用的构件库,选择符合系统需求的候选构件。
-
根据发现的构件修改需求:
- 根据已识别的候选构件,调整和修改系统需求,以确保需求与可用构件的功能相匹配。这一步确保了系统需求的可实现性和合理性。
-
体系结构设计:
- 设计系统的总体体系结构,定义各个构件的角色和它们之间的交互方式。确保体系结构能够有效地集成所有已选择的构件。
-
构件定制与适配:
- 对已选择的构件进行必要的定制和适配,以满足系统的具体需求。这可能包括修改构件的配置、接口或行为,使其与系统的其他部分兼容。
-
组装构件创建系统:
- 将所有定制和适配好的构件进行组装,创建最终的系统。确保各个构件之间的正确集成和协作,进行系统级别的测试和验证。
CBSE过程通过系统需求概览、识别候选构件、修改需求、体系结构设计、构件定制与适配以及组装构件创建系统等六个主要活动,支持基于构件组装的软件开发过程。这一过程强调构件的重用和集成,旨在提高软件开发的效率和质量。
🔎4.不同点
CBSE过程与传统软件开发过程的不同点:
-
需求明确性:
- CBSE:早期需要完整的需求,以便尽可能多地识别出可复用的构件。
- 传统软件开发:需求可以在开发过程中逐步细化,不要求在早期阶段就完全明确。
-
需求细化和修改:
- CBSE:在过程早期阶段,根据可利用的构件来细化和修改需求。如果可利用的构件不能满足用户需求,就应该考虑由复用构件支持的相关需求。
- 传统软件开发:需求通常由开发团队根据用户的初始需求进行详细的需求分析,不需要考虑已有构件的约束。
-
进一步的构件搜索及设计精化:
- CBSE:在系统体系结构设计完成后,会有一个进一步的对构件搜索及设计精化的活动。可能需要为某些构件寻找备用构件,或者修改构件以适合功能和架构的要求。
- 传统软件开发:系统设计完成后,开发团队通常直接进行编码实现,不需要额外的构件搜索和适配工作。
-
开发过程:
- CBSE:开发就是将已经找到的构件集成在一起的组装过程,强调构件的集成和复用。
- 传统软件开发:开发主要集中在从头开始编写代码,进行详细的设计和实现,复用的构件较少。
CBSE过程与传统软件开发过程的主要不同点在于:CBSE在早期需要明确的需求,依赖现有构件来细化和修改需求,强调构件的搜索和适配,并以构件集成为主要开发活动。而传统软件开发过程则更加注重逐步细化需求,直接进行编码实现。
🔎5.组装方式
构件组装是指通过直接集成构件或使用专门编写的“胶水代码”将构件整合在一起,以创建一个系统或另一个构件的过程。常见的构件组装方式有以下三种:
-
顺序调用组装:
- 通过按顺序调用已有的构件,可以用两个已经存在的构件来创造一个新的构件。例如,上一个构件的输出作为下一个构件的输入。
- 这种方式通过简单的流水线式调用,串联多个构件以实现复杂功能。
-
层次组装:
- 这种情况发生在一个构件直接调用另一个构件所提供的服务时。被调用的构件为调用的构件提供所需的服务。
- 层次组装要求两个构件之间的接口匹配兼容,使调用关系能够顺利进行。
- 这种方式强调构件之间的层次关系和依赖性。
-
叠加组装:
- 这种情况发生在两个或两个以上的构件放在一起创建一个新构件时。新构件合并了原构件的功能,从而对外提供了新的接口。
- 外部应用可以通过新接口来调用原有构件的接口,而原有构件不互相依赖,也不互相调用。
- 这种组装类型适合于构件是程序单元或者构件是服务的情况,能够实现功能的叠加和扩展。
构件组装通过顺序调用组装、层次组装和叠加组装三种方式,将不同的构件集成在一起,创建更复杂的系统或构件。每种组装方式有其特定的应用场景和优势,适用于不同类型的构件集成需求。
🔎6.不兼容问题
在构件组装过程中,可能会遇到以下三种不兼容问题,可以通过编写适配器来解决:
-
参数不兼容:
- 问题:接口两侧的操作名称相同,但参数类型或参数个数不相同。
- 解决方法:编写适配器以转换参数类型或调整参数个数,使两个接口的参数匹配。
-
操作不兼容:
- 问题:提供接口和请求接口的操作名称不同。
- 解决方法:通过适配器将一个接口的操作名称映射到另一个接口的操作名称,确保调用能够正确匹配。
-
操作不完备:
- 问题:一个构件的提供接口是另一个构件请求接口的一个子集,或者相反。
- 解决方法:编写适配器来补充缺失的操作,或者在调用时忽略多余的操作,确保两个接口的操作集合能够兼容。
通过编写适配器,可以有效解决参数不兼容、操作不兼容和操作不完备等构件组装中的不兼容问题,实现不同构件之间的无缝集成。
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)