极客大学架构师训练营 听课总结 - 架构视图,设计文档 -- 第二课
说明
如何画架构视图,如何写出设计文档
讲课老师 – 首席架构师李智慧
4+1 视图模型
架构视图有很多种,不同的人给不同的架构视图。
架构师不能只用一种视图解决所有问题。
软件开发的本质是什么?如何进行软件架构设计?
备注:4+1架构模型,4+1架构视图 在工业上不常用,了解即可。
4+1 架构视图
软件架构 = {元素, 形式, 关系/约束}
单一的视图无法完整的表达架构,因此需要具备完整的视图集。
- 逻辑视图(Logical View),设计的对象模型。
- 过程视图(Process View),捕捉设计的并发和同步特征。
- 物理视图(Physical View),描述了软件到硬件的映射,反映了部署特性。
- 开发视图(Development View),描述了在开发环境中软件的静态组织结构。
- 场景视图(Scenarios),描述用例场景。
逻辑视图
- 相关方:客户、用户、开发组织管理者。
- 视角:系统的功能元素,以及它们接口,职责,交换。
- 主要元素:系统,子系统,功能模块,子功能模块,接口。
- 用途:开发组织划分,成本/进度的评估。
开发视图
- 相关者: 开发相关人员,测试人员
- 视角: 系统如何开发实现
- 主要元素:描述系统的层,分区,包,框架,系统通用服务,业务通用服务,类和接口,系统平台和相关基础框架。
- 用途:知道开发组织设计和开发实现。
物理视图
- 相关者:系统集成商,系统运维人员。
- 视角:系统逻辑组件到物理节点的物理部署和节点之间的物理网络配置。
- 主要元素:物理节点以及节点的通信。
过程视图
- 相关者:性能优化,开发相关人员。
- 视角:系统运行时线程,进程的情况。
- 主要元素:系统进程,线程以及处理队列等。
场景视图
- 相关者:用户,设计和开发人员。
- 视角:概括了架构上最重要的场景(最典型或者最优风险)及其非功能性需求,通过这些场景的实现,阐明了架构的广度或众多架构元素运行的方式。
软件建模语言
如何使用UML进行软件架构设计与建模?
重点:表达什么样的设计意图?给什么人看?
使用什么UML图,达成什么样的设计意图?
在这里插入代码片
什么是模型?
模型是一个系统的完整的抽象。人们对某个领域特定问题的求解及解决方案,对他们的理解和认识都蕴含在模型中。
通常,开发一个计算机系统是为了解决某个领域特定问题,问题的求解过程,就是从领域问题倒计算机系统的映射。
在还没工程师之前,架构师要有系统的抽象,对现实业务的抽象。
需要考虑有哪些模型,哪些模块,哪些类,怎么交互的?
领域问题: 开发的时候,要理解业务。
概念模型:要有抽象能力,想象最终产品的样子。
系统需求:前瞻性地抽象出系统需求。
解决方案:提前列出关键问题的解决方案。
为什么要建造模型?
建造传统模型的目的
- 为了证明某件事物能够工作
- 前提: 建造模型的成本远远低于建造实物的成本
☞ 造飞机
☞ 建高楼
建造软件模型的目的
- 为了与TA人沟通
- 为了保存软件设计的最终成果
- 前提:除非模型比代码更能说明问题
何时、何处画图?
何时画图?
- 讨论、交流时
- 最终设计文档
☞ 只保留少量的、重要的图
☞ 避免涉及过多内容和实现细节
何处画图?
- 白板
- 绘图工具, 如:StarUML、Gliffy Diagrams、Visio、Aastah
- draw.io
UML 简介
什么是UML?
- Unified Modeling Language, 或统一建模语言
- 以图形方式描述软件的概念
可用来描述:
- 某个问题领域
- 构思中的软件设计
- 描述已经完成的软件实现
UML图的分类 - 静态图
静态图 - 通过描述类、对象和数据结构以及它们之间存在的关系,来描述软件要素中不变的逻辑结构。
- 用例图(Use Case Diagrams)
- 对象图(Object Diagrams)
- 类图(Class Diagrams)
- 组件图(Component Diagrams)
- 包图(Package Diagrams)
- 部署图(Deployment Diagrams)
UML图的分类 - 动态图
动态图 - 通过描述执行流程或者实体状态变化的方式,来展示软件实体在执行过程中的变化过程。
- 协作图(Collaboration Diagrams)
- 序列图(Sequence Diagrams)
- 活动图(Activity Diagrams)
- 状态图(State Diagrams)
通用模型元素
可以在图中使用的概念统称为模型元素。模型元素在图中用其相应的视图元素(符号)表示,下图给出了常用的元素符号:类、对象、结点、包和组件等。
模型元素和模型元素之间的连接关系也是模型元素,常见的关系有接口实现(Interface Realization)、继承泛化(Generalization)、依赖(Dependency)、关联(Association)、聚合(Aggregation)和组合(Composition)。这些关系的图示符合如图所示。
- 实现 Interface Realization:接口的实现。
- 继承/泛化 Generalization:表示一般与特殊的关系,即“一般”元素是“特殊”关系的泛化。类上表示继承的关系。
- 依赖 Dependency:表示一个元素以某种方式依赖于另一种元素。一般表示方法内的局部变量,或者参数。
- 关联 Association:连接(connect)模型元素及链接(link)实例。一般表示类的属性。
- 聚合 Aggregation:表示整体与部分的关系。整体的生命周期结束,部分不一定。
- 组合 Composition:表示整体与部分的强关系。整体与部分的生命周期一致。
弱关系:接口实现、依赖、聚合。
强关系:类继承、关联、组合。
用例建模
用例建模技术,用于描述系统的功能需求。在宏观上给出模型的总体轮廓。通过对典型泳衣的分析,使开发者能够有效地了解用户的需求。
用例模型描述的是外部执行者(Actor)所理解的系统功能。它描述了待开发系统的功能需求。
它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的各个阶段和 UML 的各个模型。
用例模型由若干个用例图构成,用例图中主要描述执行者和用例之间的关系。在 UML中,构成用例图的主要元素是用例和执行者及其它们之间的联系。
创建用例模型的工作包括:定义系统、确定执行者和用例、描述用例、定义用例间的关系、确认模型。
执行者(Actor)
执行者是指用户在系统中所扮演的角色。执行者在用例图中是用类似人的图形来表示,但执行者可以是人,也可以是一个外界系统。
注意:用例总是由执行者启动的。
如何确定执行者:
- 谁使用系统的主要功能(主执行者)?
- 谁需要从系统获得对日常工作的支持和服务?
- 需要谁维护管理系统的日常运行(副执行者)?
- 系统需要控制哪些硬件设备?
- 系统需要与其它哪些系统交互?
- 谁需要使用系统产生的结果(值)?
用例图描述了系统的功能需求,它是从执行者的角度来理解系统,用于捕获系统的需求,规划和控制项目;描述了系统外部的执行者和系统提供的用例之间的某种联系。
图中还要另外两种类型的连接,即《使用》和《扩展》关系,是两种不同形式的泛化关系。
《Use》表示一个用例使用另一个用例。
《Extend》通过向被扩展的用例添加动作来扩展用例。
例 项目与资源管理系统的 Use case 图
系统的主要功能是:项目管理,资源管理和系统管理。项目管理包括项目的增加、删除、更新。资源管理包括对资源和技能的添加、删除和更新。系统管理包括系统的启动和关闭,数据的存储和备份等功能。
- 分析确定系统的执行者(角色)
☞ 项目管理员、资源管理者、系统管理员、备份数据系统。 - 确定用例
☞ 项目管理,资源管理和系统管理。 - 对用例进行分解,画出下层的 Use Case 图
☞ 对上层的用例进行分解,并将执行者分配到各层次的 Use Case 图中。
静态建模
任何建模语言都以静态建模机制为基础,标准建模语言 UML 也不例外。所谓静态建模是指对象之间通过属性互相联系,而这些关系不随时间而转移。
类和对象的建模,是 UML 建模的基础。 UML 的静态建模机制包括:
- 用例图(Use Case Diagram)
- 类图(Class Diagram)
- 对象图(Object Diagram)
- 包图(Package Diagram)
- 组件图(Component Diagram)
- 部署图(Deployment Diagram)
类与对象
面向对象的开发方法的基本任务是建立对象模型,是软件系统开发的基础。UML 中的类图(Class Diagram)与对象图(Object Diagram)表达了对象模型的静态结构,能够有效地建立专业领域的计算机系统对象模型。
属性(Attribute):属性用来描述类的特征,表示需要处理的数据。
属性的定义: visibility attribute-name :type = initial-value {property-string}
可见性 属性名: 类型=缺省值{约束特性}
其中:可见性(visibility)表示该属性对类外的元素是否可见。
分为:
- public (+) 公有的。
- private (-) 私有的。
- protected (#) 受保护的。
- 默认 (未声明)
操作
对数据的具体处理方法的描述则放在操作部分,操作说明了该类能做些什么工作。操作通常为函数,它是类的一个组成部分,只能作用于该类的对象说。
操作定义:
visibility operating-name(parameter-list): return-type {property-string}
可见性 操作名(参数表); 返回类型{约束特性}
一个使用 Visio 绘制的类图
包图
一个最古老的软件方法问题是:怎样讲大系统拆分成小系统。解决该问题的思路之一是将许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合。UML 中这种分组机制叫包(Package)。引入包是为了降低系统的复杂性。
动态建模
动态模型主要描述系统的动态行为和控制结构。动态行为包括系统中对象生存期内可能的状态以及事件发生时状态的转移,对象之间动态合作关系,显示对象之间的交互过程以及交互顺序,同时描述了满足用例要求所进行的活动以及活动间的约束关系。
在动态模型中,对象间的交互是通过对象间消息的传递来完成的。对象通过相互间的通信(消息传递)进行合作,并在其生命周期中根据通信的结果不断改变自身的状态。
动态模型
动态模型主要描述系统的动态行为和控制结构。
包括四类图:状态图、活动图、时序图、合作图。
- 状态图(State Diagram):状态图用来描述对象,子系统,系统的生命周期。
- 活动图(Activity Diagram):着重描述操作视线中完成的工作以及用例实例或对象中的活动,活动图是状态图的一个变种。
- 时序图(Sequence Diagram):是一种交互图,主要描述对象之间的动态合作关系以及合作过程中的行为次序,常用来描述一个用例的行为。
- 合作图(Collaboration Diagram):用于描述相互合作的对象间的交互关系。
UML 中的消息
- 简单消息(Simple):表示控制流,描述控制如何从一个对象传递到另一个对象,但不描述通信的细节。
- 同步消息(Synchronous):是一种嵌套的控制流,用操作调用实现。操作的执行者要到消息响应操作执行完并会送一个简单的消息后,再继续执行。注意:方法间的调用都是同步消息,异步处理是方法内的处理机制。
- 异步消息(Asynchronous):是一种异步的控制流,消息的发送者在消息发送后就继续执行,不等待消息的处理。
时序图
时序图(Sequence Diagram)用来描述对象之间动态的交互行为,着重体现对象间消息传递的时间顺序。
时序图存在两个轴
- 水平轴表示一组对象
- 垂直轴表示时间
时序图中的对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。
对象间的通信通过再对象的生命线之间消息来表示,消息的箭头类型指明消息的类型。
顺序图的形式
有两种使用顺序图的方式:一般格式和实例格式。
实例格式详细描述一次可能的交互。没有任何条件和分支或循环,它仅仅显示选定情节(场景)的交互。
而一般格式则描述所有的情节。因此,包括了分支,条件和循环。
活动图
活动图(Activity Diagram)的应用非常广泛,它既可用来描述操作(类的方法)的行为,也可以描述用例和对象内部的工作过程,并可用于表示并行过程。
活动图描述了系统中各种活动的执行的顺序。刻画一个方法中所要进行的各项活动的执行流程。
活动图中一个活动结束后将进入下一个活动(在状态图中状态的变迁可能需要事件的触发)。
活动图的模型元素
构成活动图的模型元素有:活动件、转移、对象、信号、泳道等。
活动:
- 是构成活动图的核心元素,是具有内部动作的状态,由隐含的事件触发活动的转移。
- 活动的解释依赖于作图的目的和抽象层次,在概念层描述中,活动表示要完成的一些任务;在说明层和实现层,活动表示类中的方法。
- 活动用圆角框表示,标注活动名。
- 模型元素有:活动、转移、对象、信号、泳道等。
- 活动还有其它的图标符号:初始状态、终止状态、判断、同步线。
转移
- 转移描述活动之间的关系,描述由于隐含事件引起的活动变迁,即转移可以连接各活动及特殊活动(初始状态、终止状态、判断、同步线)。
- 转移用带箭头的直线表示,可标注执行该转移的条件,无标注表示顺序执行。
泳道
- 泳道进一步描述完成活动的对象,并聚合一组活动。活动图是另一种描述交互的方式,描述采取何种动作,做什么(对象状态转移),何时发生(动作序列),以及在何处发生(泳道)。
- 泳道也是一种分组机制。
对象流
- 活动图中可以出现对象,对象作为活动的输入/输出,用虚箭头表示。
控制图符
- 活动图中可发送和接收信号,发送符号对应于与转移联系在一起的发送断句。接收符号也同转移联系在一起。
状态图
状态图(State Diagram)用来描述一个特定对象的所有可能的状态及其引起状态转移的事件。一个状态图包括一系列的状态以及状态之间的转移。
状态
所有对象都具有状态,状态是对象执行了一系列活动的结果。当某个事件发生后,对象的状态将发生变化。状态图中定义的状态有:
- 初态 - 状态图的起始点,一个状态图只能有一个初态。
- 终态 - 是状态图的终点,而终态则可以有多个。
- 中间状态 - 可包括三个区域:名字域、状态变量与活动域。
- 复合状态 - 可以进一步细化的状态称作复合状态。
合作图(不常用,相当于没有时间顺序的时序图)
合作图(Collaboration Diagram),也称为协作图,用于描述相互合作的对象间的交互关系和链接(Link)关系。虽然时序图和合作图都用来描述对象间的交互关系,但侧重点不一样。时序图着重体现交互的时间顺序,合作图则着重体现交互对象间的静态链接关系
实现模型
实现模型描述了系统实现时的一些特性,又称为物理体系结构建模。包括源代码的静态结构和运行时刻的实现结构。
实现模型包括:
- 组件图(Component Diagram)显示代码本身的逻辑结构,它描述系统中存在的软件构件以及它们之间的依赖关系。
- 部署图(Deployment Diagram)描述了系统中硬件和软件的物理配置情况和系统体系结构。显示系统运行时刻的结构,部署图中的简单节点是指实际的物理设备以及在该接点上运行构件或对象。部署图还描述节点之间的链接以及通信类型。
组件图
组件(Component):系统中遵从一组接口且提供其实现的物理的、可替换的部分。对系统的物理方面建模时,它是一个重要的构造块。
组件可以看作包与类对应的物理代码模块,逻辑上与包,类对应,实际上是一个文件,可以有下列几种类型的构件:
- 源代码构件
- 二进制构件
- 可执行构件
组件之间的依赖关系是指结构之间在编译,连接或执行时的依赖关系。用虚线箭头表示组件图符:
部署图
部署图用来描述系统硬件的物理拓扑结构以及在此机构上执行的软件,即系统运行时刻的结构。部署图可以显示计算机结点的拓扑结构和通信路径,结点上执行的组件,特别对于分布式系统,部署图可以清楚的描述系统中硬件设备的配置,通信以及在各硬件设备上各种软构建和对象的配置。因此,部署图是描述任何基于计算机的应用系统的物理配置或逻辑配置的有力工具,部署图的元素有结点和连接。
部署图的结点代表某种计算机,通常是某种硬件。同时结点还包括在其上运行的软组件,软件组件代表可执行的物理代码模块。如一个可执行程序。结点的图符是一个立方体。
保险系统的部署图
部署图个结点之间进行交互的通信路径称为连接,连接表示系统中的结点存在着联系,用结点之间的连线表示连接,在连接的连线上标注通信类型。
推荐书籍:
UML 精粹 - Martin Fowler
UML Distilled - Martin Fowler
注意:以上信息如有侵权,请联系作者删除,谢谢。
极客大学架构师训练营 听课总结 - 架构视图,设计文档 -- 第二课相关推荐
- 极客大学产品经理训练营:业务架构与概念模型 第10课总结
讲师:邱岳 1. 什么是状态图 系统中的概念或对象随着一些事件的发生,改变了状态,通常这个状态比较多.比较复杂时,我们需要用状态图来表示他们的边界,以及触发状态转换的活动. 2. 动手画 – 员工状态 ...
- 极客大学产品经理训练营:产品经理的职业规划 第20课总结
讲师:邱岳 1. 简历(你)作为产品 简历可能是你向你未来同事展示的第一个作品,关于你自己的经历.特点.审美,所以要像设计和研发一个产品那样设计好你的简历. 当谈论产品的时候,我们的思路应该依然是:用 ...
- .NET 云原生架构师训练营(系统架构)--学习笔记
▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第176篇原创文章 ...
- 极客大学产品经理训练营 产品文档和原型 作业4
作业 [本周作业]写一个用例,挑一个:你自己的产品 / 你喜欢的产品 / [拍东西]发起拍卖/ [知识星球]加入星球/ [极客时间]购买课程: 1. 标题作者修改历史 标题:[极客时间]购买课程 作者 ...
- 极客大学产品经理训练营 解决方案的设计与积累 第6课总结
说明 讲师:邱岳(二爷) 1. 解决方案 解决方案的前提是明确了 利益相关者 和 待解决的问题 出解决方案是产品经理的天职,不要直接转发 注意 X-Y Problem,核心关注 X 大量的练习/模仿/ ...
- 极客大学产品经理训练营:业务流程与产品文档 第11课总结
讲师:邱岳 1. 原型图 1.1 手绘图 + Scanner Pro 1.2 线框图 1.3 高保真产品图 1.4 做原型图的目的 坍缩:规划时梦到自己成了乔布斯,赶紧画个图让自己冷静冷静: 具体:具 ...
- 极客大学产品经理训练营:数据分析与商业分析,商业分析到业务分析 第18课总结
讲师:邱岳 1. 产品经理眼中的利润.成本.收入 利润 = 收入 - 成本 奶茶利润率极高,达到60%左右.但是奶茶盈利比较难. 所有买水的产品利润率都极高,比如可口可乐,咖啡,奶茶等. 案例:有个面 ...
- 极客大学产品经理训练营:产品文档和原型咋弄 - 流程图 第9课总结
讲师:邱岳 1. 图的意义 流程图.活动图.时序图.状态图,本次聚焦于过程和行为描述. 提效.宏观.点睛. 梳理思路 用例:做什么? 流程图:怎么做? 2. 流程图.活动图.时序图 3. 动手画 – ...
- 极客大学产品经理训练营 极客时间购买课程-大作业
1. 标题作者修改历史 标题:[极客时间]购买课程 作者 历史 时间 易筋 创建 2021-01-09 易筋 添加购买流程图6 2021-03-02 易筋 添加购买时序图7 2021-03-16 2. ...
- 极客大学产品经理训练营 认识产品经理下 第2课总结
说明 讲师:邱岳(二爷) 分享提纲 互联网产品经理的能力模型 互联网产品经理的个人素质 产品经理的特质与气场 互联网产品经理的职业发展阶段与晋级之路 互联网产品经理的若干真相 1. 产品经理的能力模型 ...
最新文章
- python提交spark_带有python入口点的sparksubmit
- 麦肯锡发布调研,揭开“那些引入人工智能的企业都怎么了 ”
- python PyQt5 sender(是发出信号的对象)、receiver(接收信号的对象)、slot(插槽)(是对信号做出反应的方法)
- oracle group by效率问题,性能优化-group by的优化
- Java魔法类:Unsafe应用解析
- JavaScript(js)概述和使用
- 11、web端主要应用在哪些领域?
- 一个项目了解 SpringBoot 集成 MyBatis
- 数据库errno: 1045的解决办法
- opencv python 实现灰度图像和彩色图像直方图全局均衡化和自适应均衡化
- excel_applications
- python 视频转图片和图片转视频
- 三极管开关电路_利用三极管设计开关电路
- 黑莓断网 思考 apn激活pdp整个过程
- 软件工程项目:电梯调度
- 【破解EXE】VC程序的破解及修改一例
- LeetCode分类刷题----链表篇
- C语言和R语言变量命名规则的比较
- mysql 截取第一个字符_MySQL 字符串截取SUBSTRING()函数
- 【考研英语语法】复杂句的逻辑
热门文章
- c语言下楼的题目,用C语言编写下面题目的程序:
- java 正则表达式 替换 html,java 正则表达式 替换 html
- xss绕过尖括号和双括号_【Web安全入门】三个技巧教你玩转XSS漏洞
- java 取消引用_java – 如何取消方法引用谓词
- 64位的windows server 2003运行IIS6运行32位的.NET程序
- 智联招聘基于Apache Pulsar打造企业级事件中心
- 数据恢复系列(4)~开源恢复工具
- Python(函数的参数)
- php类型之class类,对象,构造函数的理解
- 在Web页面中控制其元素的选择状态