文章目录
- 前言
- 什么是4+1视图?
- 逻辑视图(Logical View)
- 流程视图(运行视图)(Process View)
- 开发视图(Development View)
- 物理视图(Physical View)
- 场景视图
- 和UML图的联系和区别
- 4+1视图是完备的和正交的吗?
- UML
- UML的对象关系总结
- UML常用的图
- 参考
前言
华为有很多新式武器:软件教练,CleanCode,可信认证,还有4+1视图。其实并非华为的首创,这些都是业界成熟的东西。说新,主要是华为对它们的重视程度和运用程度超过国内很多公司。
国内很多公司也知道这些东西的重要性,但玩不起,投入不起,也没有能力玩转。
什么是4+1视图?
“4+1”视图是对逻辑架构进行描述,最早由 Philippe Kruchten 提出,他在1995年的《IEEE Software》上发表了题为《The 4+1 View Model of Architecture》的论文,引起了业界的极大关注,现在是软件设计的结构标准。
4+1视图是法宝,在华为得到极大重视和运用,华为软件工程能力成熟的标志。华为内部有个平台,专门做4+1的设计,这个平台虽然不够完美,界面上有很多细节还有瑕疵,但已经足够使用了。顺带说一句,华为内部有很多五花八门的平台,大部分是自研或改装的,风格上不统一,基本是各自为战,功能都很强大,但交互体验要略差一些。当然也有全公司上下统一使用的平台。总而言之是百花齐放的状态。
4+1是一种用于"描述软件密集型系统的体系结构,基于使用多个并发视图"的视图模型。
视图用于从不同的利益相关者,如最终用户、开发人员、系统工程师和项目经理的角度来描述系统。
该模型的四个视图分别是逻辑视图、开发视图、过程视图和物理视图。此外,选定的用例或场景被用来说明作为"加一"视图的架构。因此,该模型称为4+1视图。
逻辑视图(Logical View)
逻辑视图涉及系统向最终用户提供的功能。可用UML图用来表示逻辑视图,包括类图和状态图。SpringCloud的逻辑视图:
流程视图(运行视图)(Process View)
流程视图涉及系统的动态方面,解释系统流程及其通信方式。关注系统的运行时行为。流程视图涉及并发、分布、集成器、性能和可扩展性等。表示流程视图的UML图包括序列图、通信图、活动图。
开发视图(Development View)
开发视图从程序员的角度说明一个系统,涉及到软件管理。这种视图也称为实现视图。它使用UML组件图来描述系统组件。用来表示开发视图的UML图包括程序包图。
物理视图(Physical View)
物理视图从系统工程师的角度描述系统。它关注的是物理层上软件组件的拓扑结构,以及这些组件之间的物理连接。这个视图也被称为部署视图。用来表示物理视图的UML图包括部署图。
场景视图
使用一小套用例或情景来说明架构,这成为第五种观点。场景描述了对象之间和流程之间的交互序列。它们用于识别架构元素,并说明和验证架构设计。它们还可以作为架构原型测试的起点。这种视图也被称为用例视图。
和UML图的联系和区别
UML图可以看作是4+1视图思想的实现方式。
4+1视图 | UML | 说明 |
场景视图 | use case | 交互场景,和需求人员沟通用。输出用例图+功能特性+界面原型。 |
逻辑视图 | 架构图 | 静态的,粗粒的概念模型,表现系统的层次结构。架构师的主要输出。开发视图是其实现 |
开发视图 | 软件包,组件图,类图 | 静态的,是具体实现,和开发人员交流用 |
运行视图 | 流程图,序列图,活动图 | 动态的、和开发人员交流用 |
物理视图 | 部署图,拓扑图 | 静态的、和运维实施人员交流用 |
4+1 视图是软件概要设计的依据,也是软件设计的第一步输出。
- 场景视图是根据需求方的要求,告诉软件开发人员,用户需要什么,大致长什么模样。
- 架构师根据场景需求进行概念抽象,层次设计,独立于具体的编程语言和技术实现。
- 到了开发视图这一步,就需要细化到有哪些子系统和组件,组件之间的关联,再往下一步分解就变成详细设计了。
- 也是概要设计的一部分,确立系统运行态和交互关系
所以,整个软件过程可以分为三个阶段:
第一:设计阶段:确立需求和架构,也就是输出场景视图和逻辑视图
第二:实现阶段:确立开发视图和运行视图,研发人员实现之
第三:上线阶段:部署实施
三个阶段是迭代往复的。
4+1视图是完备的和正交的吗?
正交性是自然的,但4+1是否足够了?这是架构师经常在心底的质疑。此处待补充。
UML
UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。UML主要目的:
- 为用户提供现成的、有表现力的可视化建模语言,以便他们开发和交换有意义的模型。
- 为核心概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。
- 独立于特定的编程语言和开发过程。
- 为了解建模语言提供一个正式的基础。
- 鼓励面向对象工具市场的发展。
- 支持更高层次的开发概念,如协作,框架,模式和组件。
- 整合最佳的工作方法 (Best Practices)。
UML的对象关系总结
UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。
依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但由于其有更特殊的用途,所以被单独描述。uml中用带箭头的虚线表示Dependency关系,箭头指向被依赖元素。
泛化(Generalization):通常所说的继承(特殊个体 is kind of 一般个体)关系,不必多解释了。uml中用带空心箭头的实线线表示Generalization关系,箭头指向一般个体。
实现(Realize):元素A定义一个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。这个关系最常用于接口。uml中用空心箭头和虚线表示Realize关系,箭头指向定义约定的元素。
关联(Association):元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素。
聚合(Aggregation):关联关系的一种特例,表示部分和整体(整体 has a 部分)的关系。uml中用带空心菱形头的实线表示Aggregation关系,菱形头指向整体。
组合(Composition):组合是聚合关系的变种,表示元素间更强的组合关系。如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向整体。
UML常用的图
UML图分为结构图和行为图。
结构图分为类图、轮廓图、组件图、组合结构图、对象图、部署图、包图。
行为图又分活动图、用例图、状态机图和交互图。
交互图又分为序列图、时序图、通讯图、交互概览图。
UML图说明:
参考
- 《The 4+1 View Model of Architecture》