zoukankan      html  css  js  c++  java
  • Windows工作流基类库(WF)探密

    虽然我们无法跟踪微软的所有新技术,但是Windows工作流基类库(WF)却是一项我们无论如何都不能错过的技术。本文将阐明WF的优势,并且建立我们的第一个基于WF的应用程序。WF是一套多功能的编程构架,这套框架用于建立图形化的商业规则控制流程序。
    WF是四项技术之一,其它三项技术为WPF、WCF和Windows CardSpace。这些技术同.NET 3.0框架一起发布。也许这个”3.0”非常带有迷惑性,有很多开发人员认为这些技术必须运行在新的.NET框架中,事实上,所有的技术都是运行在.NET2.0中的。

    现在面临的问题是有很多.NET开发商一直不愿意使用新版本的.NET framework,原因是如果使用这些新的framework,就必须在客户的机器上安装它们。但事实上,.NET 3.0技术只是在.NET 2.0的基础上加了一些库而已。我们可以在VS2005中象使用其他的第三方.net库一样使用它们。

    一、WF的优势
    按着长规,一种新的技术必须为他们的黄金时代做准备,以及在它们被广泛使用之前提供切实可行的解决方案。这两点WF都做到了。WF不仅采用了.NET3.0技术,而且是根据实际需要的功能和设计经验而精心实现的。下面是关于WF的一些实际的优势:

    1. WF提供了一套高度抽象和可视化的商业处理模型。这套模型可以非常容易地使用和被理解。无论使用它的是开发人员或是商业领域专家。
    2. WF可以非常容易地改变与之相关的商业处理规则,并且不必重新编译。
    3. WF编程模型可以使开发人员建立一套可测试的内核集合,并且可以在多个程序中使用它们。
    如果和UML的活动图进行比较的话,WF图表拥有最好的软件构架,我们并不用担心这套构架过时,或是和商业处理逻辑有分歧,因为WF就是商业处理逻辑。
    WF运行时为我们提供了一个强大的,可扩展的开发执行环境。为了可以长时间处理,当工作流处理空闲状态时,可以被保存在一个数据库中。当一个动作发生时,工作流被激活。

    二、面向动作编程(Activity-Oriented Programming,AOP)
    WF向.NET开发人员引入了一个而向动作编程的概念。这套编程模型可以通过组合动作集合来完成大规模的商业处理逻辑。
    下面我们来看看图2所示的部分工作流,一个工作流图包含了如validateProductActivity, sellProductActivity, backOrderProductActivity和shipOrderActivity等动作。在工作流中的每一个动作都拥有一个单独的执行单元。

    图2 工作流图:一个包含了动作的工作流图,它们中的每一个都执行一个商业处理逻辑。


    我们可以使用WF设计器将动作加到一个图表中,并且指定相应的条件以及基于一定规则的控制流指定工作流程。这种方法是非常强大的,它将使我们的应用程序非常容易编写,理解和配置。

    三、开始编写WF程序
    为了编写WF程序,我们需要如下的开发环境:

    1. .NET 2.0 Framework
    2. Visual Studio 2005
    3. .NET 3.0 Framework
    4. Visual Studio 2005 工作流扩展
    在.NET 3.0中的WF框架中定义了超过350个类,这些类分别在如下的三个命名空间中:

    1. System.Workflow.Activities
    2. System.Workflow.ComponentModel
    3. System.Workflow.Runtime


    当我们在VS2005中安装WF扩展时,WF扩展将VS2005中加入一个工作流模板工程,我们可以选择这个模板工程来建立或加一个新的WF项目。
    在安装完上术的软件后,我们就准备建立第一个工作流。下面的部分将描述建立和编写WF程序的一系列步骤。
    四、顺序工作流和状态机工作流的对比
    我们可以建立两个类型的工作流:顺序工作流和状态机工作流。在图2中显示的是一个顺序工作流,这个图类似于UML的动作图。这种工作流将按着预先定义的顺序来执行。
    与之大不相同,状态机工作流定义了一个状态的集合,在些状态之间可以互相转换。工作流的外部事件将处理状态之间的转换。为了简便起见,本文将只关注顺序工作流。
    最后,我们可以将任何顺序工作流描述成一个状态机工作流,反之亦然。然后,每一种工作流类型并不是对所有应用程序都适合,如在人机交互的情况下,状态机工作流将是最好选择。

  • 相关阅读:
    catboost原理以及Python代码
    lightgbm原理以及Python代码
    stacking算法原理及代码
    python自动化之爬虫模拟登录
    python自动化之爬虫原理及简单案例
    python自动化之PDF
    input type="file"鼠标无法变小手
    typescript中类和接口的区别
    TypeScript基础类型
    微信小程序-获取input值的两种方法
  • 原文地址:https://www.cnblogs.com/lilyzhang/p/1577972.html
Copyright © 2011-2022 走看看