Which Style of Workflow when?[翻译]

转自(英文):http://blogs.msdn.com/davegreen/archive/2005/10/20/483309.aspx

前言:第一次翻译,呵呵,见笑(可能看英文更容易懂)

该用哪个工作流模式?

WWF支持3种基本的工作流模式:顺序模式,状态机模式,数据驱动模式

许多人问我在他们的问题里该用哪种工作流模式?我想我该把我的想法分享给大家。

 

让我们从一个简单的问题开始。我希望让Fred核查一份文档,之后Joe批准,最后由我发送给我的客户。

 

这是一个明显的顺序工作流。为了实现它,我创建了一个顺序工作流工程,加上一系列的Activities,包括要求Fred核查,Joe批准,最后我发送给客户,那么这个工作流就结束了。

 

顺序工作流有个明显的特征,那就是工作流在控制之中(workflow is in control)。FredJoe和我在被要求的时间,去做被要求做的工作。我们做了自己的工作后,让工作流系通知道我们做完了,接着这个工作流系统决定下一步的事情。

 

当然,工作流模式并不是说流程不总是像上例一样流水线型的。还可以有条件分支,循环等等。工作流模式意味着工作流系统控制着流程的顺序。这种模式是经典的工作流模式,它存在于在各种各样的产品线中。

 

我们在看看另一个例子。我准备对一个正在开发的产品进行测试。当我找到一个bug,把它交给罪恶的开发者,接着安心的等待这个bug被修复。我准备用一个工作流去管理这个过程。

 

至此,这个流程看上去很熟悉。这些步骤是:测试者提交bug,开发者修复bug,测试者验证bug。非常像我们之前讲的简单的文档批审。

 

但这只是幻象。真正发生了什么事呢?一个测试者提交了bug并且把他交给Bill处理。Bill认为应该由Clive处理,于是把bug转交给了Clive。或者Bill认为这个Bug描述不明确,没有意义,要求测试者把问题描述清楚点。甚至他可能在情绪很好的情况下,修复了这个bug,并把bug交会给了测试者,如果提交这个bug的测试者不在,便会交给另一个测试者。等等类似的情况,每个参与者在某个阶段可能做出各种各样的选择。

 

如果用顺序工作流模式描述上述情形的话,将会是如下的样子

        测试者T发起一个bug流程

        T描述bug细节

        Tbug提交给开发者D

LabelA Switch

          D转交给开发者E

               Goto LabelA

          D拒绝处理bug

             Switch

               T接受拒绝

               T更新Bug并且提交给开发者F处理

                   Goto LabelA

              End Switch

          DT请求更多的bug信息:

          T提交了更详细的信息

               Goto LabelA

          D解决后,提交给T

          T验证后,撤销了这个Bug

         End Switch

 

如果用状态机模式来处理这个问题,那么将会是:

 

State: Initial
      Action: T adds bug details
      Action: T assigns to developer D; new state = Fixing

State: Fixing
      Action: D assigns to developer E
      Action: D rejects bug to T; new state = Rejected
      Action: D requests info;  new state = Pending Info
      Action: D submits solution; new state = Pending Approval
      Action: T withdraws bug; new state = Closed

State: Rejected
      Action: T accepts rejection; new state = Closed
      Action: T updates bug and assigns to developer F; new state = Fixing

State: Pending Info
      Action: T submits info; new state = Fixing

State:  Pending Approval
      Action: T rejects solution; new state = Fixing
      Action: T accepts solution; new state = Closed

State: Closed

这样的流程更清晰,更容易理解。并且,增加更多特征并不会是结构变得复杂,仅仅是简单的增加状态和动作

那么使用状态机模式的准则是什么呢?在工作流外面有重要的选择需要做出吗?是用户在控制吗(Is the user in control)?工作流模式期望需要做的事的选择在工作流系统外面决定。

所以,如果工作流系统不做出选择,那么一个状态机模式的工作流将会控制这一系列的选择。

posted on 2006-08-29 09:53    阅读(82)  评论(0)    收藏  举报