在WF中,工作流分为两种类型,序列式(Sequential)和状态机(State Machine)。
序列式工作流将一系列待执行的呃步骤以一种预先描述好的次序描述出来。在这种工作流里,控制流程的是我们很熟悉的诸如if-else和while循环结构。序列式工作流的行为可以用简单的流程图来演示。以一个取款机取款的例子来看。
每一个步骤都是很清楚地定义好的。这个工作流有着确定的起点与终点,我们不能随意跳转到中间的某个点上,唯一能做的只有从头开始。
状态机工作流则并不定义固定的流程,它们定义一组状态,包括状态之间可能存在的转移。同样是取款机取款,我们看看它的状态机描述。
方框中的不再代表独立的步骤,而是代表状态。每个状态可以转移到一个或多个其它状态上去。执行这样的工作流不一定要从第一个状态开始。这就允许工作流被打断,然后根据需要恢复。在WF中,状态的转移是通过宿主应用程序引起的外部事件触发的,这就意味着工作流的控制完全是交由外界完成的。
具体在设计时该选择哪一种工作流是一个很重要的问题。一般来说,判断的依据就在于控制工作流走向的重要选择是发生在工作流的内部还是外部,是否由用户进行控制。序列工作流在本质上是对工作流的路径建模,将路径信息都编码到了模型之中,因此适合于前一种情况;在某些时候,我们并不关心工作流的路径,我们只关心当前的工作流状态,并且有哪些可能的选择会跳转到某个另外的状态,这就是后一种情况,应该采用状态机工作流。