阅读说明:
- 如果有排版格式问题,请移步www.yuque.com/mrhuang-ire… 《如何画好技术图?》,选择宽屏模式效果更佳。
- 本文为原创文章,转发请注明出处。如果觉得文章不错,请点赞、收藏、关注一下,您的认可是我写作的动力。
简介
软件系统是怎么来的?通常完成功能设计,然后进行分析、抽象,完成建模和架构设计,最后来实现,最后得到了软件系统。比如我们要开发一个电子商务网站,对于卖家如何管理商品、管理订单、服务用户;对于买家如何挑选商品,如何下订单,如何支付等等。对这些客观领域问题的抽象就是各种功能及其关系、各种模型对象及其关系、各种业务处理流程。

作为一名研发人员,除了实现系统功能之外,很有必要掌握画图。在很多场合可能会与别人沟通或者交流自己的架构设计、规划等思路,比如在分享、答辩、沟通需求等场景。另外,接手新系统时,结合代码画出系统的系统设计图能够帮助我们更好的理解系统。软件设计工具有很多,draw.io是开源,免费,能够满足大部分的场景。process on是一个国内的类似于draw.io的软件,有非常丰富的模板市场,开通会员可以解放更多功能。
软件设计图
用例图
用例图是表示一个系统中用例与参与者及其关系的图,主用例图主要用在需求分析阶段。用例图是站在用户的视角,反映用户和软件系统的交互,描述系统功能。用例图包含以下三个基本元素:
参与者: 与系统主体交互的外部实体的类元,可以是人,也可以是其他的系统。
用例: 系统中的功能单元,参与者在系统中做某件事从开始到结束的一系列活动的集合,是外部可见的系统功能,对系统提供的服务济宁描述。
关系: 用例之间的关系。有扩展、包含、泛化。

系统的功能可能会很复杂,所以一张用例图可能只包含其中一小部分功能,这些功能被一个矩形框框起来,这个矩形框被称为用例的边界。

活动图
产品经理使用用例图表达产品需求,确认功能的系统边界,然后通过活动图来表达用例的具体流程。活动图是业务主要流程的图形化展示,描述业务流程具体实现逻辑,通常内部含有多个分支流程。活动图又叫流程图,包含以下几个元素。
- 起点: 活动开始节点,一个活动图中只能有一个开始状态,通常以实心圆圈图标表示;
- 结束点: 活动结束节点,一个活动图中可以有多个开始状态,通常以空心双环图标表示;
- 终止点: 活动子流程结束点一个活动图中可以有多个开始状态;
- 活动/动作: 表示业务流程中的动作,以圆角矩形来表示;
- 决策点: 以菱形来表示,包含流入和流出;
- 控制流: 连接两个动作或控制节点,前一个节点动作执行完成后,通过控制流进入下一个动作。用带箭头实线来表示,箭头方向表示流转方向。
- 泳道: 非必须,为了展示清晰,可以根据活动的范围,将活动根据领域、系统和角色等划分到不同的泳道中,使流程边界更加清晰。泳道有两种画法:纵向和横向。纵向泳道主体一般是领域、系统、角色。横向画法主体一般是子流程。当然遇到比较复杂的业务流程,也可以两者结合起来,让业务流程清晰明了。
- 分叉/合并: 流程并发,用户分开活汇聚控制流;

活动图非常实用,在需求分析阶段,产品经理用来描述业务流程。在概要设计和详细设计阶段,需要参考活动图来进行下一步的设计。来看几个活动图示例。



时序图
时序图是另外一种描述业务流程的方法,时序图突出描述两个点:1. 对象间的交互活动; 2.对象之间消息传送的时间顺序。时序图包含以下元素:
- 对象和生命线: 生命线头上那个方正的框里面存放的就是对象,对象有自己的名字,生命线其实就是从上到下的一个虚线。生命线标示一个对象存在的生命周期。这个对象可以是类对象,也可以是更大粒度的参与者,比如组件、服务器、子系统等
- 激活条:标识着对象在这里激活,执行任务。
- 消息:对象间通过传递消息来进行交互,消息可以作用于对象间,也可以作用于对象内部触发。消息可分为:同步消息,异步消息和返回消息。
同步消息:发送消息的对象在发送消息后会等待,等消息接受对象接受消息返回后才会解除挂住的状态继续自己的工作。
异步消息:发送消息的对象在发送消息后会继续自己的工作,而不等消息接受对象接受消息返回。
返回消息:标示发送消息后返回的动作。
- 交互片段:后续新加的功能,能够对消息触发添加额外控制条件,目前支持循环,条件判断,选择,并行触发等。
循环(loop): 执行重复触发消息,支持添加循环控制条件。
条件判断(alt): 对应活动图中的分支if else。
选择(opt): 类似switch。
并行(par): 同时进行,类似于多线程执行任务。

UML中的通信图(也叫协作图)也是用来表示对象之间的关系及交互活动,和顺序图是同构的,两者之间基本可以相互转换,差异点通信图不支持时序图中的交互片段。

状态图
业务系统中,很多重要的领域对象都有比较复杂的状态变迁,比如订单,有创建状态、支付完成状态、发货状态、签收状态等等各种状态。此外,还有很多其他领域对象比如用户、商品、红包等都有多种状态。
状态图用来展示单个对象生命周期的各种状态,以及在事件触发条件下状态变迁。状态机图清楚地描述了状态之间的转换及其顺序,这样就方便产品和研发看出事件的执行顺序。状态图有以下元素组成:
- 伪状态:伪状态是一种抽象,它包括了状态机图中各种瞬间通过的顶点。伪状态包含初态、终态、选择。
- 状态: 对象所处的状态。
- 转移: 状态由一个状态转移到另外一个状态,触发转移的事件成为转移事件。


总结
本文介绍了软件系统开发前期阶段常用的软件设计方法,包含用例图、活动图、时序图、状态图。还有业务架构、应用架构、数据架构,后续将阐述。另外,要想图画的好,需要有清晰的思考。画图前需要对业务和技术有深入的理解,清楚各个模块、层次之间的关系,才能快速将系统用图画出来。