工作流学习




    WWF作为WinFX API的支柱之一,提供给开发者一个普通框架-在其上开发过程驱动的和以工作流为中心的工作流程序。
   
    一、什么是工作流,工作流做什么用呢?
    一个工作流本质是一种方法-用来归档包含在完成一个单元的工作中的活动。典型地,在处理过程中,工作\"流\"流过一项或更多活动。这些活动可以通过机器或人工来实现,并且有可能象在一个互联网应用程序定义页面顺序一样得简单,也有可能象管理必须为任何数目的人都要看到、更改并同意的文件或产品一样得复杂。

    二、WWF是什么呢?它的整体框架?
    WWF说到底也是一个程序,只不过它是一个专门控制工作流的程序,它为开发工作流提供了框架、模型、以及工作流的工作引擎(即WorkflowRuntime),让开发人员快速的建立工作流。

    1、Activities(活动)
        工作流的组成部分,一个工作流由若干个activity组成,每个activity都包含特定的功能,去完成一件工作。
    2、Serivices(服务)
        当一个工作流实例运行时,可以伴随运行许多个Serivices,这些Services都是采用可插式调用的,即这些Serivices是为了满足不同的工作流的运行实例的需求,伴随实例而运行的。如:在一个工作流的运行实例中,我们可以同时加载与宿主程序通信的Service,监听和跟踪工作流实例运行的Service等等。
    3、WWF与宿主程序的通信和关系。
    宿主程序能够与工作流通讯交换数据通过通信Service服务,同时,宿主程序也可以与WWF中一些特殊的Activiy活动通过定义一些接口,采用事件传递参数的形式进行通信,交换数据。
    4、WWF持久化(“钝化”)
    WWF工作流程序可以长时间的运行,而且当WWF运行时所在的计算机重新启动后,这些实例仍然可以正常准确的运行,是由WWF的“钝化”机制来实现的。在WWF内部包含了一个非常有用的Service服务,用来把这些运行的数据保存到SQlServer中。
    5、WWF跟踪
    WWF中在工作流运行的同时,能够监视工作流的操作,而其这些操作可记录在数据库中或文件里。
    6、WWF序列化
    WWF的activity活动是可以被序列化的,通过序列化可将自定义的Activity的自定义样式进行保存。
    7、WWF动态更新
    WWF工作流允许工作流在运行的状态中,动态的更新工作的状态,或动态的控制工作流的流向,更改预期的流程。

 

在WWF中有两种类型的工作流,序列工作流和状态机工作流,和我一样,许多刚接触WWF的人可能比较迷惑,什么时候该选择序列工作流,而什么时候又该选择状态机工作流呢?

序列工作流是最容易让人理解的一种工作流概念,比如挂号->看病->缴费->取药这个流程是一个非常典型的序列工作流,用Sequential工作流模型可以很容易的为这种情景建模。

但是,现实中还有一些流程可能不会这么简单,考虑一个缺陷管理系统,当测试人员发现了一个BUG,新建一个缺陷,然后将它分配给某开发人员,然后他解决了改BUG,然后返回给测试人员进行回归测试,测试人员确认该BUG被解决后,关闭该缺陷。该情景看起来和挂号看病的流程很类似。但是,现实情景很可能是这样的,测试人员发现了BUG,将它分配给开发人员Bill,而Bill在看了该Bug后说:这不是我的问题,这是Clive的。然后将该Bug重新分配给了Clive。或者Bill说,是测试人员弄错了,这根本就不是一个Bug。然后拒绝了该Bug。或者Bill请测试人员提供更详细的信息。或者,Bill今天心情很好,处理了该Bug。或者原始的测试人员出去了,被另外一个测试人员接手该Bug的回归。或者该测试人员失误打开了一个不应该被打开的缺陷等等。每一个参与者都有可能在一堆选择中做出一个跳到任意一个其它的步骤。请问如何设计该序列工作流?

面对这样的问题,使用状态机工作流就会是一个更好的选择。可以将Bug的每个状态设置为一个环节(Stage),工作流的行为就是在各个状态之间进行转换。你可以非常容易的使用State Machine Workflow来为这个流程建模。

那么,什么情况下使用何种类型的工作流有没有一个简单的评判依据呢?

Cave给出了一个简单的判断标准:影响工作流程的一些重要的选择是否发生在工作流外部(out of workflow)?是否由用户进行控制?假如是,那么采用序列工作流的概念来建模将是一件非常让人头疼的工作。而状态机工作流则比较期望工作流的状态选择发生在工作流的外部。

那么为什么状态机工作流会更加适合这种情况?根本原因在于序列工作流在本质上是对工作流的路径建模,将路径信息都编码到了模型之中。但是在某些时候,我们并不关心工作流的路径,我们只关心当前的工作流状态,并且有哪些可能的选择会跳转到某个另外的状态。假如一定要用序列工作流来描述这种情形,那么会画出许多复杂的路径流程,但是这些复杂的路径却并非我们所关注的问题域。造成了开发成本的浪费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值