暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

4+1架构视图

一瑜一琂 2021-02-24
2220

4+1视图源自于1995年,Philippe Kruchten在《IEEE Software》上发表的一篇题为《The 4+1 View Model of Architecture》的论文。

本文是对论文核心内容的简介和分析。


为什么需要4+1视图?

在「什么是软件架构」一文中,我们给架构下了一个定义:「在特定约束决策结果」。在理想情况下,主要「结果」应该是运行良好、满足需求的系统。

不过,考虑到后续软件的维护、扩展等因素,需要提供对应的文档。文档包括但不限于:

  • 用例图

  • 决策过程文档(各个方案优缺点,选择该方案的原因)

  • 架构图

  • 备选方案

  • ......

早期的架构设计人员,期望在一张架构图里将所有的设计都囊括在内,但是很明显,这基本不可能。「系统」是一个真实运行的实物,它是动态的;而「架构图」是静态图,很难用一张架构图就描绘出「系统」的全貌。这就像,你无法使用一张二维图片来描绘出一个三维物体。二维图像只是三维物体的一个投影而已。

比如下面这幅图片:

这是一个圆柱体:

  • 它在V面和W面的投影是个矩形

  • 在H面的投影是个圆形

如果圆柱体的位置稍微有一点变化,三个投影就会出现变化。比如,将圆柱体稍微倾斜一点,那么:

  • V面的投影可能就变成了菱形

  • W面的投影可能就变成了正方形

  • 而H面的投影可能就变成了椭圆形

软件架构图就像各个面上的投影图,架构图的目标读者则需要从这些投影图理解系统全貌(圆柱体)。一张投影图,显然无法做到这一点。同时,表意不清的架构图(倾斜后的投影)也很难帮助目标读者理解系统全貌

所以Philippe Kruchten提出了4+1视图,从5个方面来描述系统,每个方面都可以理解为是系统的一个投影,每个投影是关注系统的一个方面,结合五个视图,可以帮助目标读者理解系统全貌。


4+1视图

Philippe Kruchten提出的4+1视图包括了逻辑视图,过程视图,物理视图,开发视图和场景。其中「场景」就是那个1,用来整合其它四个视图。

  • 逻辑视图:设计的对象模型(使用面向对象的设计方法时)。这是一个静态视图,描绘的是系统的静态逻辑结构。论文中使用的是对象模型,不过并不是强制的,只要能表达出意图即可。

  • 过程视图:捕捉设计的并发和同步特征。这是一个流程图,通过对进程的描述,将系统中的各个组件串联到一起。和上面的逻辑视图结合,可以得到一个相对动态的系统结构。

  • 物理视图:描述了软件到硬件的映射,反映了分布式特性。这是一个静态视图,表示系统的各个组件、子系统是如何部署的。

  • 开发视图:描述了在开发环境中软件的静态组织结构。这也是一个静态视图,表示系统在代码层面的结构。

  • 场景:整合上述四个视图。通过一个个的用例流程将系统组件串联到一起。既可用于完善上面的各个视图,也可以用于验证上面的视图意图。




4+1视图的设计过程

Philippe Kruchten在论文中给出了一个设计过程:「一种场景驱动方法

首先,通过「场景用例」来捕获系统中大部分的关键功能

  • 最重要的功能

  • 系统存在的理由

  • 或使用频率最高的功能

  • 或体现了必须减轻的一些重要的技术风险。

然后,基于这些「场景用例」开始迭代设计

  • 开始阶段:

    • 基于风险和重要性为某次迭代选择一些场景

    • 形成架构草图。然后对场景进行「描述」,以识别主要的抽象(类、机制、过程、子系统)

    • 所发现的架构元素被分布到 4 个蓝图中:逻辑蓝图、进程蓝图、开发蓝图和物理蓝图

    • 然后实施、测试、度量该架构,这项分析可能检测到一些缺点或潜在的增强要求

    • 捕获经验教训

  • 循环阶段:

    • 下一个迭代过程开始进行:

      • 重新评估风险

      • 扩展考虑的场景选择

      • 选择能减轻风险或提高结构覆盖的额外的少量场景

    • 然后:

      • 试着在原先的架构中描述这些场景

      • 发现额外的架构元素,或有时还需要找出适应这些场景所需的重要架构变更

      • 更新4个主要视图:逻辑视图、进程视图、开发视图和物理视图

      • 根据变更修订现有的场景

      • 升级实现工具(架构原型)来支持新的、扩展了的场景集合

      • 测试。如果可能的话,在实际的目标环境和负载下进行测试

      • 然后评审这五个视图来检测简洁性、可重用性和通用性的潜在问题

      • 更新设计准则和基本原理

      • 捕获经验教训

    • 终止循环

初始的架构原型最终会演化为实际的系统 。较好的情况是在经过2到3次迭代之后,结构变得稳定:

  • 主要的抽象都已被找到

  • 子系统和过程都已经完成

  • 以及所有的接口都已经实现

接下来则是软件设计的范畴,这个阶段可能也会用到相似的方法和过程。

这些迭代过程的持续时间参差不齐,原因在于:

  • 所实施项目的规模

  • 参与项目人员的数量

  • 他们对本领域和方法的熟悉程度

  • 以及该系统和开发组织的熟悉程度等等

整个流程和IBM的架构设计流程很类似:


4+1视图文档结构

论文中也给出了推荐的文档结构:

  • Title Page(标题)

  • Change History(变更历史记录)

  • Table of Contents(目录)

  • List of Figures(清单)

    • Scope(范围)

    • References(引用)

    • Software Architecture(软件架构)

    • Architectural Goals & Constraints(架构目标&约束)

    • Logical Architecture(逻辑架构)

    • Process Architecture(过程架构)

    • Development Architecture(开发架构)

    • Physical Architecture(物理架构)

    • Scenarios(场景)

    • Size and Performance(规模及性能)

    • Quality(质量)

  • Appendices(附录)

    • Acronyms and Abbreviations(缩写词表)

    • Definitions(定义)

    • Design Principles(设计原则)


架构视图的应用

4+1视图实际是一种架构描述参考,并不是一个规范。现实中,可以根据架构复杂度和需求来自行决定是否使用4+1视图中的全部视图、还是部分视图。比如:

  • 只有一个处理器,则可以省略物理视图

  • 仅有一个进程或程序,则可以省略过程视图

  • 对于非常小型的系统,甚至可能逻辑视图与开发视图非常相似,而不需要分开的描述

  • 场景对于所有的情况均适用

甚至可以决定是否要按照论文所述的方式来绘制架构视图。例如,上文所说的逻辑视图,论文中使用的是对象模型来描述,具体是否要使用对象模型可以自行决定。无论使用哪种表现形式,只要能使目标读者方便的从架构视图理解整个系统架构即可。



文章转载自一瑜一琂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论