4 + 1架构视图
复杂的软件系统需要从多个维度分别定义相应的架构视图。每个架构视图:
- 面向一类特定的涉众(
Stakeholder
) - 建模一种类型的组件,以及它们之间的关系
- 解决一种类型的关注点
1995年Philippe Kruchten
在IEEE Software
上发表论文The 4+1 View Model of Architecture
,正式提出软件架构的4+1视图,最终被RUP
采纳,现在已成为架构设计的事实上的结构标准。
1. 逻辑视图
- 对系统进行面向对象的分解
- 面向终端用户
- 建模软件的功能组件(类、包等)以及功能组件之间的关系
- 解决功能关注点
2. 开发视图
- 对系统进行子系统分解
- 面向开发者/项目经理/产品经理
- 建模开发组件(模块、子系统等)以及它们之间的关系
- 解决软件的组织、重用、可移植性等关注点
3. 物理视图(部署视图)
- 映射软件组件到硬件节点
- 面向系统设计师/部署工程师
- 建模系统部署的硬件节点(服务器、路由器等)以及它们之间的关系
- 解决可伸缩性、性能、可用性等关注点
4. 进程视图
- 对系统进行进程分解
- 面向系统设计师/集成工程师
- 建模任务组件(进程和线程)以及它们之间的关系
- 解决性能、可用性、容错性,数据完整性等关注点
5. 场景视图(用例视图)
- 将一切集成到一起
- 遴选在架构方面有重要意义的少数用例
- 穿越所有的视图和层,调用所有的软件基础设施
- 作为架构可用性的证明
- 作为其余用例开发的示例
6. 总结
视图 | 逻辑 | 进程 | 开发 | 物理 | 场景 |
---|---|---|---|---|---|
组件 | 类(Class) | 任务(Task) | 模块,子系统 | 硬件节点(Node) | 步骤,脚本 |
连接器 | 关联、继承、聚合等 | 消息传递、广播、RPC等 | 编译依赖,with子句,包含关系 | 通信媒介、LAN、WAN、总线等等 | |
容器 | 包 | 进程 | 子系统(类库) | 物理子系统 | Web |
涉众 | 终端用户 | 系统设计师,集成工程师 | 开发者,项目经理,产品经理 | 系统设计师 | 终端用户,开发者 |
关注点 | 功能 | 性能、可用性、容错性,数据完整性 | 组织、重用、可移植性、产品线 | 可伸缩性、性能、可用性 | 可理解性 |