一 点睛

状态图和流程图的样子很类似,但两者的作用是不同的。

两者的区别是:流程图梳理的是一项业务的大致过程,状态图梳理的是一项业务的细致操作。

二 什么是状态图

状态图也被称为状态机图,描述了一个对象所处的状态,以及用什么操作可以促成状态的改变。

1 现实生活中的例子

当按下微波炉的“开始”按钮后,微波炉就处于开启状态;在你按下微波炉的“停止”按钮后,微波炉就处于停止状态。在这个例子中,微波炉有两个状态,分别是已开启状态和已停止状态。

2 软件系统的例子

在用户下了一个订单之后,这个订单就会被创建。此时,订单处于已下单状态;在用户支付了订单之后,订单变成了已支付状态;在运营人员发货之后,订单变成已发货状态。以此类推,订单还有其他状态。

在以上两个例子中,微波炉有已开启和已停止状态,通过操作就能改变它的状态;订单有已支付、已发货等状态,用户或运营人员通过操作,就能改变订单的状态。状态图就是用图形来表达事务的状态,以及什么操作可以改变状态。

三 状态图的表达方式

状态图有五种表达方式,分别是状态和转移、开始和结束、内部转移。下面以身份审核为例,说明状态图的表达方式。

1 状态

当用户要在某平台发表文章或课程时,该平台就要核实用户的身份信息。此时用户就要手持身份证拍照片,并将照片上传到平台进行审核。在用户提交了拍摄的照片并单击确认后,身份信息就变成“已提交,待审核”状态;如果平台审核通过,身份信息就变成“已通过”状态,如果平台审核不通过,身份信息就变成“审核不通过”状态。

订单有限状态机架构设计 订单状态机图_产品

 

a 在状态名称中,会有“已、未、待”等字眼

b 状态名称有等价的多种表达

例如:在上面这个场景下,“已提交”等于“待审核”,我们可以在状态名称中写成“已提交,待审核”。

2 转移

不同状态之间是可以转移的,状态的转移常常是通过人的操作实现的。比如,身份信息的当前状态是“已提交,待审核”,在审核人员单击“审核通过”按钮之后,身份信息的当前状态就变成“已通过”。

a 转移的画法

转移的画法是画一条带箭头的直线,并在直线上写上转移的操作,表示从一种状态能转移到另一种状态。

b 转移的触发

状态之间的转移,不仅可以由人触发,也可以由系统触发。

3 开始

状态图也有表示开始和结束的符号,这两个符号跟流程图相同。

“开始”不是一种状态,只是想让读者明白状态图从什么地方开始。“开始”只有一个,并且不可忽略。

4 结束

表示“结束”的符号是一个带有圆框的实心小圆点。和“开始”一样,“结束”也不是一种状态,只是想让读者明白状态图到哪里就结束了。“结束”仅起到提示作用,所以可以没有,也可以有一个或多个。

5 内部转移

还有一种特殊转移,被称为内部转移,用带箭头的回环表示。表明用户虽然可以操作信息,但并没有改变其状态。

例如,对于身份审核案例,如果用户在提供身份信息后,发现提交错误了,就需要重新提交身份信息。在用户重新提交身份信息后,身份信息的状态不变。仍然是“已提交,待审核”状态。

四 状态的注意点

  • 有对象才有状态
  • 表达“一个”对象
  • 不可有菱形标志

五 状态图和流程图的区别

状态图和流程图在本质上都表达了一个事务的动态行为,只是从不同的角度来表达。状态图以状态为核心表达,流程图以活动为核心表达。

1 内容上的区别

状态图表达的是对象的状态,如“已提交,待审核”状态。而流程图表达的是活动,如“用户提交身份信息”活动。在 UML 体系中,状态图表达的是状态之间的迁移,而活动图表达的是活动之间的迁移。

2 使用上的区别

流程图梳理的是一项业务的大致流程,状态图梳理的是一项业务的细致流程。一般来说,流程多的时候画流程图,状态多的时候画状态图。

3 使用上的配合

订单流程既要画流程图,也要画状态图。在这种情况下,我们就要考虑两个如何配合。通常,先画流程图,再画状态图。流程图梳理大致流程,状态图梳理细致操作。

比如,对于订单流程,我们就要先用流程图来梳理订单的大致流程。在梳理过程中,我们发现该流程涉及订单的状态有很多,这就需要进一步画状态图。我们通过状态图就可以明确订单的每个状态下,谁能进行什么操作,从而避免操作的遗漏。