业务流程,应该都会理解,因为我们每一项任务要么并行、要么串行地顺着时间轴向前推进,我们要做的工作就是将这个过程通过某种方式展现出来。
表现流程的最好办法就是使用流程图,很多初学者对流程和流程图理解得不深入,导致流程图画得不规范,反而让人费解。下面我就流程的表现方面给几点建议,供大家参考。
1、首先要充分理解业务,每个流程都和一篇文章一样,有个核心,也就是说这个流程是干什么的。比如说,我们要理解公交车上面的刷卡流程,就得要知道这个刷卡流程要做什么的,这点大家都知道,刷卡这个流程就是替代以前的人工售票操作,实现自动购票、计费和支付的功能。刷卡就为了达到这个目的。这个就是业务。

2、如何准确的理解业务?分解流程是关键。还拿上面的例子来说吧。刷卡流程都包括哪些环节?
a、乘客上车刷卡;

b、读卡器记录起始站点;
c、乘客下车刷卡;
d、读卡器自动根据起止站点计费;
e、读卡器自动扣款;
f、读卡器显示扣费结果。
可见,流程实际上是由一个个节点构成的,我们的重点就是提取这些节点。但是流程并非是一条线进行的,经常会有分支。还拿上面的例子来说明,比如乘客下车忘记刷卡,怎么办?这就引发另外一个分支流程:
a、乘客上车刷卡;
b、读卡器记录起始站点;
c、乘客下车忘记刷卡;
d、乘客第二次乘车下车刷卡;
e、读卡器自动查找上次的乘车记录,如果没有下车刷卡记录,则按全票计费,再加上当次费用合并计算;
f、读卡器自动扣款全部费用;
g、读卡器显示扣费结果。
当然,我这里的例子仅仅是为了说明流程,不涉及其中的算法,关于计费扣款的算法有很多种,具体采用哪种算法会综合考虑。
从上面的例子来看,针对复杂流程,我们需要考虑很多的分支流程。
3、了解业务的边界。每一项业务不可能没有边界,所谓边界有两层含义,一层含义是指每项业务都有一个起止点。大家都见过没有起止点的流程吧,对,都得有起止点。所以我们展现流程的时候需要有个起止点。边界的另一层含义是,任何一项任务都需要和其他的模块或系统做交互,没有人能够活在一个孤独的世界里,如果孤独了,那也等于结束了。我们的流程也是这样,复杂流程都需要交代和外部系统的交互,但是我们平时所看到的的流程图貌似没有交互,实际上并不是没有交互,而是我们的设计师要么省略了,要么就当成内部节点处理了。
4、很多流程都有输出物。流程输出形式很多,比如存到数据库、打印、输出成某种形式的文档、通过接口输出给其他系统等等。这个也应该在流程里体现出来。
做到上面几点,基本上就可以表现流程了。表现的方式也有多种,比较经典的还是流程图的方式,当然初期使用脑图也是可以的,有很多脑图高手将脑图画得惨不忍睹,这个也是不建议的,我们自己明白是不行的,关键的是要让别人明白,所以最终采取哪种形式,最好征求一下甲方的意见,如果不想征求意见的话,就干脆使用流程图的方式,比较稳妥。
如何画流程图,我就不在这里展开了,但是流程图有自己的规范,最好要瞭一眼,不然大家也是看不懂。比如说起点是个圆点,节点是个方块等等,细节上注意一下。另外在合适的地方加个注释会更好一些。
这几节的内容实际上都是架构师的工作内容,我会在后续的【软件架构师杂谈】中详细介绍。之所以在这里简单介绍一下,是希望项目经理能够架构师的工作,从而更好的管理项目。
关于流程和流程图就聊到这,下一节我们聊一聊数据结构设计。