软考-系统架构设计师 基于构件的软件工程详细讲解
个人博客:blogs.wurp.top
一、核心理念:从“建造”到“组装”
CBSE 的根本性转变在于:不再从零开始编写每一行代码,而是通过组装预先构建好的、可复用的软件构件来构建应用系统。
- 核心目标:最大化复用,从而提高开发效率、降低成本和风险,并提升软件质量。
- 比喻:传统的软件开发像是“烧砖砌房”,而 CBSE 像是“预制板建房”。架构师的角色从“烧砖工头”变成了“总装配师”。
二、基本概念与关键特性
1. 软件构件 (Software Component)
- 定义:构件是一个可独立部署、可组合的软件单元。它封装了内部实现,并通过明确定义的接口对外提供服务。
- 关键特性(与普通对象或模块的区别):
- 可独立部署:构件是一个物理实体(如
.jar
,.dll
,.so
文件),可以被单独部署和替换,而模块通常是一个逻辑概念。 - 标准化的接口:构件通过接口(如
*.h
, IDL)对外提供服务,接口与实现完全分离。 - 封装性:内部实现细节被完全隐藏,只能通过其接口进行访问。
- 可复用性:设计初衷就是为了在不同上下文中被重复使用。
- 可独立部署:构件是一个物理实体(如
2. 构件模型 (Component Model)
这是 CBSE 的运行基础和架构框架,定义了构件的本质、如何交互以及如何被部署到平台上。
- 核心要素:
- 接口 (Interface):描述构件提供的服务(操作、方法、事件)。
- 实现 (Implementation):实现接口功能的代码。
- 元数据 (Metadata):描述构件自身的属性、配置需求和依赖关系。
- 经典构件模型/标准(软考必考):
- CORBA (Common Object Request Broker Architecture):由 OMG 组织制定,跨语言、跨平台的分布式对象模型。使用 IDL (接口定义语言) 定义接口。
- COM/DCOM/COM+ (Component Object Model):微软的构件标准,用于 Windows 平台。强调二进制级别的复用。
- EJB (Enterprise JavaBeans):Sun Microsystems (现 Oracle) 为 Java 企业级应用制定的服务器端构件模型,运行在 J2EE (Java EE) 应用服务器中。
- .NET Assemblies:微软 .NET 框架下的构件单元,包含 MSIL 代码和元数据。
三、CBSE 的开发过程
CBSE 过程与传统软件开发过程有显著不同,其重心从“编码”转移到了“构件评估、集成和组装”。
1. 构件资格认证 (Component Qualification)
- 任务:评估候选构件是否适合在当前系统中使用。
- 评估依据:
- 接口兼容性:构件的接口是否与系统所需的功能匹配?
- 质量属性:构件的性能、可靠性、安全性是否满足要求?
- 适配成本:如果接口不完全匹配,需要编写包装器 (Wrapper) 或适配器 (Adapter) 的成本有多高?
- 架构师职责:制定构件的评估和选择标准。
2. 构件适配 (Component Adaptation)
- 原因:通常,“现成即用” (COTS) 的构件不会完全符合系统的需求。
- 解决方案:
- 白盒适配:如果能获取源码,直接修改源码。但通常不被推荐,因为这会使升级和维护变得困难。
- 黑盒适配:首选方案。通过编写一个包装器 (Wrapper) 构件,在新接口和现有构件接口之间进行转换。
3. 构件组装 (Component Composition)
- 任务:将经过认证和适配的构件集成到一个可运行的系统体系中。
- 基础:构件模型必须提供使构件能够相互发现和协作的基础设施(如容器、中间件)。
- 组装技术:
- 顺序组装:构件被逐个调用,形成一条处理链。
- 层次组装:底层构件为上层构件提供服务。
- 基于容器/框架的组装:构件被部署到一个容器(如 EJB 容器、Spring IoC 容器)或框架中,由容器负责管理构件的生命周期、依赖注入、事务、安全等横切关注点。这是现代 CBSE 的主流方式。
4. 系统演化 (System Evolution)
- 优势:CBSE 使系统更易于演化。单个构件可以单独升级或替换,而无需重新编译和部署整个系统,只要新构件遵守原有的接口契约。
四、CBSE 的优缺点(软考高频考点)
优点
- 提高开发效率,缩短上市时间:复用意味着更少的代码需要从头编写。
- 提高软件质量:被复用的构件通常经过充分测试和实际验证,比新编代码更可靠。
- 降低开发成本和风险:减少了开发工作量,并降低了在自有代码中引入新缺陷的风险。
- 系统更易于维护和演化:构件可以独立更新和替换。
- 促进技术标准化:迫使项目采用标准的接口和架构。
缺点与挑战
- 构件交互的复杂性:理解和调试由多个独立开发的构件组成的系统可能很困难。
- 对第三方构件的依赖:项目受制于第三方构件的质量、性能、许可协议和长期支持能力。
- “构件发现”的挑战:找到功能、质量、成本都完全合适的构件非常耗时,且往往需要妥协。
- 适配成本:编写适配器/包装器的成本可能抵消掉复用带来的好处。
- 性能开销:构件间的通信(尤其是远程调用)可能带来性能损耗。
五、CBSE 与软件架构
CBSE 与软件架构密不可分。架构师在 CBSE 项目中扮演核心角色:
- 定义构件体系结构:设计系统由哪些构件组成,以及构件之间如何连接和交互。这通常通过构件图和部署图来描述。
- 制定接口规范:明确每个构件必须提供的接口,这是构件之间协作的“契约”。
- 选择构件模型和平台:决定使用 EJB、.NET、Spring 还是其他框架作为系统的基础。
- 管理构件库:建立和维护组织内部的构件库,促进企业内部复用。
六、软考考点总结与应用
-
选择题:
- 直接考查 CBSE 的核心思想(复用、组装)。
- 考查构件的定义和关键特性(独立部署、接口标准化)。
- 区分几种主要的构件模型/标准(CORBA, COM, EJB, .NET)。
- 考查 CBSE 的优点和缺点。
- 考查 CBSE 开发过程中的关键活动(资格认证、适配、组装)。
-
案例分析题:
- 题目描述一个需要快速开发、或涉及集成多个现有系统的项目场景。
- 问题:应采用何种开发方法?请说明理由和实施方案。
- 答题要点:
- 推荐采用基于构件的软件工程(CBSE) 方法。
- 理由:为了充分利用现有资产,提高开发效率,保证质量。
- 实施步骤:a) 架构设计:划分系统构件,定义接口规范;b) 构件获取:从市场或内部库寻找候选构件;c) 构件评估:根据功能和性能指标进行评估;d) 构件适配:必要时编写适配器;e) 构件组装:将构件部署到应用服务器/容器中进行集成。
-
论文题:
- 可能围绕“论软件复用技术在系统开发中的应用”、“基于构件的软件开发方法与实践”、“企业级构件库的规划与设计”等主题。
- 写作时,可以详细论述:
- 你如何为系统设计构件化的架构。
- 在项目中如何评估和选择第三方构件(如数据库连接池、消息中间件、规则引擎)。
- 如何通过 Spring 框架的 IoC 容器实现构件的“松耦合组装”。
- 遇到的挑战(如构件不匹配、性能问题)及解决方案。
总结
对于软考架构师,掌握 CBSE 的关键在于:
- 深刻理解“组装优于编码”的哲学:认识到复用是提升软件工程效能的关键途径。
- 掌握构件模型的核心要素:接口是契约,实现被封装,容器提供支撑。
- 清晰辨析 CBSE 的优缺点:能根据项目特征(时间要求、技术积累、系统类型)判断是否适合采用 CBSE。
- 明确架构师的核心职责:设计构件架构、制定接口规范、管理构件资产。