一、软件视图的分类
现代软件系统非常复杂,通常在某个具体的时间内只需将注意力集中在某几个结构上,结构是元素本身的集合,而视图则是捕获和表达结构(文档描述),虽然它 们有区别,但在实际使用时则不严格区分,即从系统体系的角度说是结构,从文档角度说是 视图。
架构的优势也在于使用视图:每个视图强调系统的某一个方面,同时忽视系统的其他方 面,以便有助于处理或理解当前问题,描述完整的系统架构必须具备完整的视图集,“4+1” 方法就是一类完备视图集。
软件视图通常分为三种类型:
(1)模块视图类型:为系统的主要模块实现单元编档。
(2)构件和连接件视图类型:为系统的构件和连接件执行单元编档。
(3)分配视图类型:为软件的开发和执行环境之间的关系编档。
组别 | 架构风格 | 说明 | 应用于 |
---|---|---|---|
模块视图类型 | 分解 | 大模块分解为小模块,小到容易理解 | 资源分配、项目结构化和规划;信息隐蔽、封装;配置控制 |
↑ | 使用 | 一个单元的正确性依赖于另一个单元的正确性(如版本) | 设计子集;设计扩展(增量开发) |
↑ | 分层 | 上层使用下层的服务;实现隐藏细节的抽象 | 增量式开发;基于“虚拟机”上的可移植性 |
↑ | 类或泛化 | “继承自”或“是一个实例”;共享访问方法 | 面向对象的设计(使用公共模板) |
构件-连接器视图类型 | 客户机-服务器 | 构件是客户机和服务器,连接件是协议及共享信息 | 分布式操作:关注点分离(支持可修改性);负载均衡 |
↑ | 进程或通信进程 | 通过通信、同步或排除操作形成进程或线程之间的关联 | 调度分析:性能分析 |
↑ | 并发 | 在相同的“逻辑线程”上运行 | 确定资源挣用;分析线程 |
↑ | 共享数据 | 运行时产生数据、使用数据(共享数据储存库) | 性能;数据完整性;可修改性 |
分配视图类型 | 部署 | 软件功能分配给软件(进程)、硬件(处理器)和通信路径 | 性能、可能性、安全性说明。尤其在分布式或并行系统中 |
↑ | 实现 | 模块映射到开发活动中 | 配置控制、集成、测试活动 |
↑ | 工作分配 | 将责任分配到适当得开发小组,特别是公共部分不是每个人趋势线 | 项目管理、管理通用性,最好的专业技术安排 |
二、模块视图类型及其风格
模块将遵循某种方式将软件系统分解成可管理的功能单元。架构模块视图是通过文档来枚举系统的主要实现单元或模块,及这些单元之间的关系。
完整的架构文档必须包含有模块视图,它为源代码提供蓝图。
(1)分解风格能展示向模块分配责任的方式。
(2)使用风格能展示模块相互依赖的方式。
(3)分层风格能将系统分割成一组虚拟机,通过“允许使用”关系相互关联,分层风 格能帮助实现可移植性和可修改性。
(4)泛化风格能展示一个模块如何成为另一个模块的泛化或特化,从而使模块之间产 生关联。
它广泛应用于面向对象的系统,能展示继承性,并能用来使用模块之间的共性。
三、C&C视图类型及其风格
C&C 视图能定义由具有某种运行时存在的元素模型,这些元素包括进程、对象、客户 机、服务器及数据存储器等。此外,它还包含作为元素的交互路径,如通信链路和协议、信 息流及共享存储器访问。通常,可利用复杂的基础结构(如中间件框架、分布式通信信道和 进程调度)来执行这些交互操作。
(1)管道和过滤器风格中的交互模式表现出数据流连续变换的特征。
数据抵达过滤器 并经过转换后由管理传送给下一个过滤器。
(2)共享数据风格通过保留持久数据来支配交互模式,持久数据由多个数据存取器和 至少一个储存库保留。
(3)发布-订阅风格用于向一组未知接受者发送事件和消息。
可在不修改生产者的情况 下添加新的接受者(订阅者)。在发布-订阅风格中,构件通过事件发布进行交互。构件可订 阅一组事件。
(4)客户机-服务器风格能展示构件通过请求其他构件的服务进行交互的过程,将功能 划分成客户机和服务器后即可基于运行时准则把它们单独分配给各个级。
(5)对等连接系统能通过构件之间的直接交换支持服务交换。它是一种调用/返回风格。
(6)通信-进程风格的特征表现在通过各种连接件机制并发执行构件的交互,如通过同 步、消息传递、数据交换、启动和停止等进行交互。
四、分配视图类型及其风格
硬件、文件系统和团队结构都会与软件架构进行交互,将软件架构映射到其环境的一般
形式称为“分配视图类型”。
分配视图类型的三种常见风格为:
部置风格:能描述构件和连接件对硬件的映射,硬件是软件执行的场所。
实现风格:能描述模块对包含它们的文件系统的映射。
工作任务风格:能描述模块对承担模块开发任务的人员、团队或小组的映射。
(1)部置风格体现为 C&C 风格(如通信-进程风格)的元素被分配到执行平台。
(2)实现风格能将模块视图类型中的模块映射到开发基础结构。
实现一个模块总会产 生许多独立文件,必须对这些文件进行组织,以免失去对系统的控制及系统的完整性。通常 利用配置管理技术进行文件管理。
(3)软件项目的时间和预算估计取决于工作分解结构(WBS),而工作分解结构则取决 于软件架构。
工作任务风格将软件架构映射到由人组成的团队之中,实现这一项目管理的目 的。
工作任务风格与模块分解风格关系密切,它能将模块分解风格用作其分配映射的基础。 这种风格能通过添加与开发工具、测试工具和配置管理系统等对应的模块分解进行扩展。工 作任务风格还通常与其他风格联合使用,例如,团队工作任务可以是模块分解风格中的模块, 可以是分层图中的层,也可以是多进程系统中的任务或进程。
五、各视图类型间的映射关系
为了完整地描述一个架构,必须使用多个视图,这些视图必须遵守一定的映射关系。
(1)模块视图类型中的视图通常会映射到构件和连接件视图类型中的视图。模块实现 单元将映射到运行时构件。
(2)系统的构件和连接件视图和模块视图之间的关系可能会非常复杂。同样的代码模 块可由 C&C 视图的许多元素执行。反之,C&C 视图的单一构件可执行由许多模块定义的代 码。同样,C&C 构件可能会拥有许多与环境进行交互的点,每个交互点由同一模块接口定 义。
(3)分配视图类型是为有效地实现软件架构的辅助性视图,它将其他视图类型中的软 件元素映射到软件环境中,即反映其他视图与软件环境之间的关系。