通过上一节的学习我们已经学会了怎么在给项目做技术评审的时候先确定业务的结构、识别出根实体、在写代码的时候依据根实体划分领域,接下来就该轮到UML工具包里的活动图、状态机图、顺序图登场,让他们帮我们分析并图形化系统的业务行为了。
本节课我们会先盘点一下UML流程分析三剑客--活动图、状态机图、顺序图他们各自的特点和适用场景,然后会用一个真实的项目案例 — 保险公司的理赔业务系统,给大家完整地演示怎么用三剑客面面俱到、从粗到细地对业务行为进行分析和建模。
如果你对流程分析三剑客还不够熟悉,这里建议把前面这三节的内容学完再继续看下面的内容。
在继续本节的内容前再提醒一下苹果手机的用户,因为苹果税的存在本专栏在微信直接订阅价格会高于安卓用户,所以专栏在小报童同步更新,苹果手机用户可以通过扫描二维码在小报童订阅阅读,规避额外开销。
三者的特点和使用经验
活动图、状态机图、顺序图这三个我们每个都单独用一个章节讲解了他们对于业务流程分析和实现上能起到的作用,很多人会问需要用UML把流程分析和实现可视化出来的时候应该用哪种?
答案是他们三个用于流程分析的阶段不同,分析流程的视角也不同,如果是相对复杂的需求我倾向于他们三个结合使用,从大流程梳理、到表示核心业务实体状态转换、到内部流程实现挖掘,给业务行为来个全方位的剖析。
首先我们来汇总说明下UML里流程三剑客各自的特点和优势。
活动图、状态机图和顺序图是三个分析流程的UML工具,网上也称 UML 流程分析三剑客。三种图分别有不同的特点和适合的场景,结合起来使用能让我们通过不同的视角更透彻地分析流程。
活动图的特点
强调各个角色都做了什么事情,这些事情的先后关系。
在表达整体大流程上有优势,适合表达流程中的各种分支、并行、循环等情况。
活动的粒度不易过细,否则无法直观表达出整个流程
活动图在我们一开始拿到需求后分析整个流程的时候更常用,需求分析或者技术方案时应该先捋出需求的整个大的流程,这个流程使用活动图来表达就会很清晰,活动图是将流程分解成了一个一个的活动(步骤),通过活动的先后顺序来展示流程是怎么开展的,而且活动图能表达的语法更丰富像分支、并行、循环这些情况都能在活动图中直观地表达出来;
状态机图的特点
事情围绕某个核心事物展开。
表达的事物在业务整个生命周期中有不同状态,状态会因为发送了一些事件而变化。
想表达流程中事物的状态变更适合用状态机图。一旦确定大流程后要深挖需求里的核心业务实体的时候,就会需要用到状态机图以更微观的视角挖掘每个核心业务实体在大流程中的状态变化过程。
所以活动图、状态机图两者结合能更有利于我们做好需求分析和技术方案设计,我们开发的系统正是用代码来实现状态机图里业务实体状态变更的一个个方法(比如 UpdateOrderPaid、CloseOrder等),然后按照活动图表达的整体流程把这些代码串联组织在一起来实现需求的。
顺序图的特点
强调角色之间的交互,信息传递、反馈很明确,适合表达流程内部各个角色交互的细节。
强调按时间顺序分别发生了什么事情,这些事情的先后关系。
特别适合用来发掘流程中隐藏的内部流程,而且是更适合聚焦于表达大流程中的某个步骤中的详细流程,在表达比如单个接口内部逻辑上有优势。
在单个顺序图中不适合表达复杂的或过多的特殊流程(循环、条件分支等),针对过多的特殊流程最好拆解到多个顺序图或者结合文字注释来表达
因为顺序图的语法中更强调角色间的交互时相互之间提交和返回的消息,所以顺序图还特别适合表示API接口的内部逻辑实现。比如说下面这个例子: