基于组件的体系结构侧重于将设计分解为单个功能或逻辑组件,这些组件表示包含方法、事件和属性的明确定义的通信接口。它提供了更高级别的抽象,并将问题划分为子问题,每个子问题都与组件分区相关联。
基于组件的体系结构的主要目标是确保组件的可重用性。组件将软件元素的功能和行为封装到可重用和可自行部署的二进制单元中。有许多标准组件框架,例如
COM/DCOM、JavaBean、EJB、CORBA、.NET、Web 服务和网格服务。这些技术广泛用于本地桌面
GUI 应用程序设计,例如图形 JavaBean 组件、MS ActiveX 组件和 COM
组件,这些组件可以通过简单的拖放操作来重用。
与传统的面向对象方法相比,面向组件的软件设计具有许多优势,例如:
- 通过重复使用现有组件,缩短上市时间并降低开发成本。
- 通过重复使用现有组件提高可靠性。
什么是组件?
组件是一组模块化、可移植、可替换和可重用的明确定义的功能,用于封装其实现并将其导出为更高级别的接口。
组件是一个软件对象,旨在与其他组件进行交互,封装某些功能或一组功能。它具有明确定义的接口,并符合体系结构中所有组件通用的推荐行为。
软件组件可以定义为一个组合单元,仅具有合同指定的接口和显式上下文依赖关系。也就是说,软件组件可以独立部署,并由第三方组成。
组件的视图
一个组件可以有三种不同的视图:面向对象视图、常规视图和进程相关视图。
面向对象视图
组件被视为一个或多个协作类的集合。对每个问题域类(分析)和基础结构类(设计)进行了解释,以标识适用于其实现的所有属性和操作。它还涉及定义使类能够进行通信和协作的接口。
传统视图
它被看作是程序的一个功能元素或模块,它集成了处理逻辑、实现处理逻辑所需的内部数据结构以及允许调用组件并将数据传递给它的接口。
与流程相关的视图
在此视图中,系统不是从头开始创建每个组件,而是从库中维护的现有组件进行构建。在制定软件架构时,会从库中选择组件并用于填充架构。
- 用户界面 (UI) 组件包括网格、称为控件的按钮,实用程序组件公开其他组件中使用的特定函数子集。
- 其他常见类型的组件是那些资源密集型、不经常访问且必须使用实时 (JIT) 方法激活的组件。
- 许多组件是不可见的,它们分布在企业业务应用程序和因特网 Web 应用程序(如 Enterprise
JavaBean (EJB)、.NET 组件和 CORBA 组件)中。
组件特性 -
可重用性 - 组件通常设计为在不同应用程序的不同情况下重用。但是,某些组件可能是为特定任务而设计的。
- 可更换 - 组件可以自由地用其他类似组件替换。
- 不是特定于上下文的 - 组件被设计为在不同的环境和上下文中运行。
- 可扩展 - 组件可以从现有组件扩展以提供新行为。
- 封装 − A 组件描述接口,这些接口允许调用方使用其功能,并且不公开内部进程或任何内部变量或状态的详细信息。
- 独立 − 组件被设计为对其他组件的依赖性最小。
基于组件的设计原则
组件级设计可以通过使用一些可以转换为源代码的中间表示(例如图形、表格或基于文本)来表示。数据结构、接口和算法的设计应符合既定的准则,以帮助我们避免引入错误。
- 软件系统被分解为可重用、内聚和封装的组件单元。
- 每个组件都有自己的接口,用于指定所需的端口和提供的端口;每个组件都隐藏了其详细的实现。
- 应扩展组件,而无需对组件的现有部分进行内部代码或设计修改。
- 依赖抽象组件不依赖于其他具体组件,这增加了消耗性的难度。
- 连接器连接组件,指定和规则组件之间的交互。交互类型由组件的接口指定。
- 组件交互可以采用方法调用、异步调用、广播、消息驱动的交互、数据流通信和其他特定于协议的交互的形式。
- 对于服务器类,应创建专用接口来为主要类别的客户端提供服务。只有那些与特定类别的客户端相关的操作才应在界面中指定。
- 一个组件可以扩展到其他组件,并且仍然提供自己的扩展点。这是基于插件的体系结构的概念。这允许插件提供另一个插件
API。
组件级设计指南
为指定为体系结构模型一部分的组件创建命名约定,然后作为组件级模型的一部分进行优化或详细说明。
- 从问题域中获取架构组件名称,并确保它们对查看架构模型的所有利益相关者都有意义。
- 提取可以独立存在的业务流程实体,而不依赖于其他实体。
- 将这些独立实体识别并发现为新组件。
- 使用反映其实现特定含义的基础结构组件名称。
- 对从左到右的任何依赖关系以及从顶部(基类)到底部(派生类)的继承进行建模。
- 将任何组件依赖关系建模为接口,而不是将它们表示为直接的组件到组件依赖关系。
进行组件级设计
识别与分析模型和体系结构模型中定义的问题域相对应的所有设计类。
- 识别与基础结构域相对应的所有设计类。
- 描述未作为可重用组件获取的所有设计类,并指定消息详细信息。
- 为每个组件确定适当的接口,并详细说明属性,并定义实现它们所需的数据类型和数据结构。
- 通过伪代码或 UML 活动图详细描述每个操作中的处理流程。
- 描述持久性数据源(数据库和文件)并标识管理它们所需的类。
- 开发和阐述类或组件的行为表示。这可以通过详细说明为分析模型创建的 UML 状态图以及检查与设计类相关的所有用例来完成。
- 详细说明部署关系图以提供其他实现详细信息。
- 通过使用类实例并指定特定的硬件和操作系统环境,演示系统中关键包或组件类的位置。
- 可以使用既定的设计原则和准则做出最终决定。经验丰富的设计师在确定最终设计模型之前会考虑所有(或大部分)备选设计解决方案。
优势 -
易于部署 - 随着新的兼容版本的推出,可以更轻松地替换现有版本,而不会影响其他组件或整个系统。
- 降低成本 - 使用第三方组件可以分摊开发和维护成本。
- 易于开发 − 组件实现众所周知的接口以提供定义的功能,从而允许在不影响系统其他部分的情况下进行开发。
- 可重用 - 使用可重用组件意味着它们可用于将开发和维护成本分摊到多个应用程序或系统中。
- 修改技术复杂性 − 组件通过使用组件容器及其服务来修改复杂性。
- 可靠性 - 整体系统可靠性提高,因为每个组件的可靠性通过重用提高了整个系统的可靠性。
- 系统维护和演进 - 易于更改和更新实施,而不会影响系统的其余部分。
- 独立 − 组件的独立性和灵活连接性。由不同组并行独立开发组件。软件开发和未来软件开发的生产力。
|