基于组件的架构
基于组件的架构专注于将设计分解为单独的功能或逻辑组件,这些组件代表包含方法、事件和属性的明确定义的通信接口。它提供了更高级别的抽象,并将问题划分为子问题,每个子问题都与组件分区相关联。
基于组件的架构的主要目标是确保组件可重用性。组件将软件元素的功能和行为封装到可重用且可自行部署的二进制单元中。有许多标准组件框架,例如 COM/DCOM、JavaBean、EJB、CORBA、.NET、Web 服务和网格服务。这些技术广泛应用于本地桌面 GUI 应用程序设计,如图形 JavaBean 组件、MS ActiveX 组件和 COM 组件,这些组件只需通过拖放操作即可重复使用。
面向组件的软件设计比传统的面向对象方法有许多优势,例如 −
通过重用现有组件,缩短上市时间和降低开发成本。
通过重用现有组件,提高可靠性。
什么是组件?
组件是一组模块化、可移植、可替换和可重用的定义明确的功能,它封装了其实现并将其导出为更高级别的接口。
组件是一个软件对象,旨在与其他组件交互,封装某些功能或一组功能。它具有明确定义的接口,并符合架构内所有组件共有的推荐行为。
软件组件可以定义为具有合同指定接口和明确上下文依赖关系的组合单元。也就是说,软件组件可以独立部署,并受第三方组合。
组件的视图
组件可以具有三种不同的视图:面向对象视图、常规视图和与流程相关的视图。
面向对象的观点
组件被视为一组一个或多个协作类。每个问题域类(分析)和基础结构类(设计)都经过解释,以识别适用于其实现的所有属性和操作。它还涉及定义使类能够通信和协作的接口。
传统观点
它被视为程序的功能元素或模块,集成了处理逻辑、实现处理逻辑所需的内部数据结构以及允许调用组件并向其传递数据的接口。
与流程相关的观点
在此视图中,系统不是从头开始创建每个组件,而是从库中维护的现有组件构建。随着软件架构的形成,组件从库中选择出来并用于填充架构。
用户界面 (UI) 组件包括网格、按钮(称为控件)和实用程序组件,它们公开了其他组件中使用的特定功能子集。
其他常见类型的组件是那些资源密集型、不经常访问且必须使用即时 (JIT) 方法激活的组件。
许多组件是不可见的,它们分布在企业业务应用程序和互联网 Web 应用程序中,例如企业 JavaBean (EJB)、.NET 组件和 CORBA 组件。
组件的特征
可重用性 − 组件通常设计为在不同应用程序的不同情况下重用。但是,某些组件可能专为特定任务而设计。
可替换 − 组件可以自由地用其他类似组件替换。
不特定于上下文 − 组件设计为在不同环境和上下文中运行。
可扩展 − 组件可以从现有组件扩展以提供新行为。
封装 − 组件描述接口,允许调用者使用其功能,并且不暴露内部流程或任何内部变量或状态的详细信息。
独立 −组件的设计目标是尽量减少对其他组件的依赖。
基于组件的设计原则
组件级设计可以通过使用一些可以转换为源代码的中间表示(例如图形、表格或基于文本)来表示。数据结构、接口和算法的设计应符合完善的指导方针,以帮助我们避免引入错误。
软件系统被分解为可重用、内聚且封装的组件单元。
每个组件都有自己的接口,该接口指定所需端口和提供的端口;每个组件都隐藏其详细实现。
组件应该在无需对组件现有部分进行内部代码或设计修改的情况下进行扩展。
依赖于抽象的组件不依赖于其他具体组件,这增加了可扩展性的难度。
连接器连接组件,指定和控制组件之间的交互。交互类型由组件的接口指定。
组件交互可以采用方法调用、异步调用、广播、消息驱动交互、数据流通信和其他协议特定交互的形式。
对于服务器类,应该创建专门的接口来服务主要类别的客户端。接口中只应指定与特定类别的客户端相关的操作。
组件可以扩展到其他组件,同时仍提供自己的扩展点。这是基于插件的架构的概念。这允许插件提供另一个插件 API。

组件级设计指南
为作为架构模型一部分指定的组件创建命名约定,然后作为组件级模型的一部分进行细化或阐述。
从问题域中获取架构组件名称,并确保它们对查看架构模型的所有利益相关者都有意义。
提取可以独立存在而无需依赖其他实体的业务流程实体。
识别并发现这些独立实体作为新组件。
使用反映其特定于实现的含义的基础架构组件名称。
从左到右建模所有依赖关系,从顶部(基类)到底部(派生类)建模继承。
将任何组件依赖关系建模为接口,而不是将其表示为直接的组件到组件依赖关系。
进行组件级设计
识别与分析模型和架构模型中定义的问题域相对应的所有设计类。
识别与基础架构域相对应的所有设计类。
描述未作为可重用组件获取的所有设计类,并指定消息详细信息。
为每个组件确定适当的接口并阐述属性并定义数据类型和数据实现它们所需的结构。
通过伪代码或 UML 活动图详细描述每个操作内的处理流程。
描述持久数据源(数据库和文件)并识别管理它们所需的类。
开发和阐述类或组件的行为表示。这可以通过阐述为分析模型创建的 UML 状态图并检查与设计类相关的所有用例来完成。
详细说明部署图以提供额外的实施细节。
通过使用类实例并指定特定的硬件和操作系统环境,演示系统中关键包或组件类的位置。
可以使用既定的设计原则和指南做出最终决定。经验丰富的设计师在确定最终设计模型之前会考虑所有(或大多数)替代设计解决方案。
优点
易于部署 − 随着新的兼容版本的推出,更容易替换现有版本,而不会对其他组件或整个系统产生影响。
降低成本 − 使用第三方组件可以分摊开发和维护成本。
易于开发 −组件实现众所周知的接口来提供定义的功能,允许在不影响系统其他部分的情况下进行开发。
可重用 − 使用可重用组件意味着它们可用于将开发和维护成本分摊到多个应用程序或系统中。
修改技术复杂性 − 组件通过使用组件容器及其服务来修改复杂性。
可靠性 − 整个系统的可靠性增加,因为每个单独组件的可靠性通过重用增强了整个系统的可靠性。
系统维护和发展 − 易于更改和更新实现,而不会影响系统的其余部分。
独立 − 组件的独立性和灵活的连接性。由不同的小组并行独立开发组件。为软件开发和未来的软件开发提供生产力。