做个程序员日常工作有很多,写代码、对需求、写方案等等,还包括画图:流程图、架构图、交互图、功能模块图、UML 类图、部署图、各种可视化图表等等五花八门。通过图的形式,可以更好地展示系统、更清晰地表达自己的思路,便于理解;还能锻炼自己的画功,真是一举多得的事。
系统架构图是为了抽象的表示软件系统的整体轮廓和各个组件之间的相互关系和约束边界,以及软件系统的物理部署和软件系统的演进方向的整体视图。
一图胜千言。要让干系人理解、遵循架构决策,就需要把架构信息传递出去。架构图就是一个很好的载体。那么,画架构图是为了:
搜集了很多资料,分类有很多,有一种比较流行的是 4+1 视图,分别为场景视图、逻辑视图、物理视图、处理流程视图和开发视图。
场景视图用于描述系统的参与者与功能用例间的关系,反映系统的最终需求和交互设计,通常由用例图表示。
逻辑视图用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系 统如何构建的过程,通常由 UML 的组件图和类图来表示。
物理视图用于描述系统软件到物理硬件的映射关系,反映出系统的组件是如何部署到一组可 计算机器节点上,用于指导软件系统的部署实施过程。
处理流程视图用于描述系统软件组件之间的通信时序,数据的输入输出,反映系统的功能流程 与数据流程,通常由时序图和流程图表示。
开发视图用于描述系统的模块划分和组成,以及细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。
时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
一般的软件开发都是为了支撑某个具体的业务。有时候业务的流程会比较复杂,涉及到多种角色,这时就可以使用时序图来梳理这个业务逻辑。这样会使业务看起来非常清晰,代码写起来也是水到渠成的事情了。
流程图是对过程、算法、流程的一种图像表示,在技术设计、交流及商业简报等领域有广泛的应用。通常用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序。用图形表示算法,直观形象,易于理解。有时候也被称之为输入-输出图。顾名思义,就是用来直观地描述一个工作过程的具体步骤。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务所必需的管理过程。
如上表所示,流程图有一套标准的符号,每个符号代表特定的含义。举个例子,一个公司的产品检验流程可以用如下的流程图来表示:
一张简明的流程图,不仅能促进产品经理与设计师、开发者的交流,还能帮助我们查漏补缺,避免功能流程、逻辑上出现遗漏,确保流程的完整性。流程图能让思路更清晰、逻辑更清楚,有助于程序的逻辑实现和有效解决实际问题。
数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
这样的解释听起来太端着了,我还是喜欢拆词然后用大白话来理解:
数据流图=数据流+图
所谓数据流,是由一组固定成分的数据组成,表示数据的流向。这里的数据流向,不仅指数据的输入、输出,还包括中间的加工、储存等环节。
外部实体:指系统之外、又与系统有联系的人或事物,它表达了该系统数据的外部来源和去处;
数据加工:描述输入数据流到输出数据之间的变换,也就是输入数据流经过什么处理后变成了输出数据。
注意事项:每个加工都有一个名字和编号。编号能反映该加工位于分层的数据流图的哪个层次和哪张图中,能够看出它是由哪个加工分解出来的子加工。
数据存储:某种数据保存后的逻辑统称,不是指保存数据的物理地点和物理介质。每个数据存储都有一个名字。
数据流:处理功能的输入/输出,箭头表示数据流向。
理解了数据流图的概念、组成要素,我们回到最开始给出的答案,也是题主想知道的重点——如何绘制数据流图:
由于系统究竟包括哪些功能可能一时难于弄清楚,可使范围尽量大一些,把可能有的内容全部都包括进去。
这个阶段,应该充分了解“系统从哪些外部实体接受什么数据”、“系统向哪些外部实体送出什么数据”等信息,这将是第二步绘制顶层数据流程的关键。
确定系统的输入输出后,我们将可以将它们用“加工”连接起来,“加工”用以表示被开发的整个系统,也是数据流组成或值变化的地方。下图为销售管理系统的顶层图:
对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示。
0层图:就是把顶层图的“加工”分解成若干个“子加工”,并用数据流将这些“子加工”连接起来,使得顶层图的输入数据经过若干“子加工”处理后,变成顶层图的输出数据流。
(1)确认“加工”方法
其实我前面也简单提到,“加工”用以表示被开发的整个系统,也是数据流组成或值变化的地方。因此,0层图数据流的组成或值变化的地方可以变成若干“子加工”。
(2)确定数据流的方法
一起到达、一起处理的数据可看成数据流。
(3)关于数据存储
对于以后要使用的数据,可以组织成为一个数据存储来表示。
注意事项:0层图只有一张,图中的加工号分别是0.1、0.2、…,或者1、 2 、…
接下来,就是对其他“子加工”重复拆解,直至“子加工”无法被拆解。
ER模型的英文全称为Entity-relationship model,又称实体-联系模型、实体关系模型或实体联系模式图,是指一类概念数据模型的高层描述所使用的数据模型或模式图。简单来说,ER模型是帮助把现实世界的数据内容映射成模型,然后从模型转化到具体的数据库设计。
思维导图又叫“心智图”、“脑图”,是一种把抽象概念转为图像化的思考方法。思维导图一般从一个核心主题出发,再连线延展出出与之关联的子级概念或内容,由子级概念再引申出下一个子级,最后形成树状或网状的图结构。
作为一个研发菜鸟,在阅读大型系统的源码时碰上了很多问题,很多时候并不是语法层面的问题,反而是因为快速迭代开发和系统的庞大性给我梳理系统架构和模块功能带来较大的挑战。通过简单绘制系统的架构图、各模块之间的接口交互和时序图等,我可以更加直观地理解整个系统的运作模式,大概就是所谓的磨刀不误砍柴工。