Windows Workflow Foundation(五)——框架组成、工作流创作模式 (转载)

简介:

这个专题前面的三个指南,介绍了WWF编程了三个大方面:顺序工作流状态机工作流和自定义活动。相信大家对WWF的编程模型已经有了一个初步的了解。从这次开始,我们就要深入WWF,全面的探究一下WWF

传统的编程语言是针对短期运行应用程序的,缺乏持久化抗中断的功能支持。WWF是一个框架,不是一种语言。他对工作流应用程序有深刻的认识,提供了各种手段来处理持久化,中断补偿,故障恢复等功能。

WWF同时具有灵活性可扩展性。你可以直接用代码定义工作流,也可以用外部的定义语言也定义,或同时使用两者。你可以用你自己的自定义活动来实现自定义的工作流模式,以到达可重用的目的。

WWF支持模型驱动的开发,提供了可视化的设计工具,并隐藏了一些系统级的功能,如事务、状态管理和并发控制,是开发者可以专注于业务模型。

WWF中的工作流和活动

工作流是一组相关的活动的集合。

活动WWF中可建模、可编程、可重用、可执行的原子单位。WWF提供了一组丰富的活动库,来构建你的工作流。

WWF的工作流应用程序

一个应用程序必须做以下步骤,才能使用WWF

1. 创建一个WorkflowRuntime的实例。它代表了工作流引擎。

2. 为运行时引擎配置服务

3. 启动引擎。

4. 使用引擎来创建和管理工作流。

当工作流运行时, 引擎使用大量的可插拔的服务来处理持久化、事务、线程、跟踪和计时器等任务。

你可以通过配置这些服务来扩展和修改运行时引擎的行为,也可以创建自定义的服务来提供另外的功能。

(译者)很多朋友在回复中提了几个方面的疑问。这里我统一解答下:

n WWF支持以编程方式,固化的定义工作流,也支持以XML文件形式定义工作流。

n WWF可以以编码的方式来创建工作流,也可以用工作流模型设计工具来定义,这些工具集成在了vs2005中。我会在以后的随笔中介绍设计工具。用设计工具创作的工作流也可以导出为XML定义。

n WWF目前也处于测试阶段,不太适合于商用。

n WWF目前版本仅支持.NET Framework 2.0。而vs2005又不支持1.1,所以,vs.net2003下不能开发WWF应用。

下面列出的是你在创建工作流中会用到的一些概念。

Ø 顺序工作流

Ø 状态机工作流

Ø 工作流创作模式

Ø 使用活动控制流程

Ø 在工作流中使用条件

Ø 在工作流中使用事务

Ø 获得工作流中的状态信息

Ø 在工作流中使用异常

Ø 在工作流中使用补偿?(Compensation

Ø 使用时间处理活动

Ø 在工作流中使用代码

Ø 在工作流中使用动态更新

Ø 在工作流中使用数据

Ø 在工作流中使用角色

Ø 在工作流中使用XML支持

Ø 编译工作流

Ø 序列化工作流

之后的篇章中,我讲详细解释以上的概念。



工作流创作模式

ms-help://MS.WinWF.v1.EN/WinWF_GettingStarted/html/aacf4ec6-da05-4974-958a-974769dda739.htm

WWF支持两种不用的工作流创作风格:顺序工作流和状态机工作流。顺序工作流只向前运行的,它也用于那些重复的,流程相对固定的场景中。状态机工作流讲工作流设计为一个状态机。工作流本身包含了一组状态。

默认情况下,WWF将工作流定义与业务逻辑分隔开。在一个典型的创作场景中,设计着使用设计器来设计工作流定义,然后使用C#或其他.NET语言也编写业务逻辑。这种创作模式叫代码分隔(code-separation)。

WWF支持以下创作模型:

l Code-only 这是WWF默认的创作模式。在这种模式下,你需要使用WWFAPI,以编程的方式用代码来定义工作流。工作流定义代码和业务逻辑代码将混合在一起。

l Code-separation 这种模式可以同时使用设计器和代码。

l No-code 这种方式下,你可以使用任何的文本编辑器来定义工作流,然后使用WWF命令行编译器来编译文本工作流定义。

想了解更多工作流创作模式的信息,请看 顺序工作流,状态机工作流,在工作流中使用代码,编译工作流(没有链接的章节在将写好后加上链接)。

顺序工作流风格是只进的。这种工作流适合于重复的,相对固定的操作,比如,定义一组活动,并让他们按固定的顺序走。

顺序工作流以固定的顺序从头到尾运行工作流。如果说顺序工作流的流程完全是确定的,那也不尽然。举个例子,你可以使用Listen活动(事件监听),或者Paralled活动(并行执行),这样一来,一个严格的事件顺序就会被打破。

更多的工作流创作信息,请看工作流创作模式

状态机工作流

ms-help://MS.WinWF.v1.EN/WinWF_GettingStarted/html/f0b837d0-9d74-41dc-9724-13acbcd3c433.htm

这这种风格中,创作者把工作流建模成一个状态机。工作流本身是由许多状态组成的。其中一个状态指定为起始状态。每个状态能接收一组指定的事件。事件的触发将导致状态的迁移。当状态迁移到终止状态时,工作流就结束了。下面的这个表列出了WWF框架的活动库中,跟状态机相关的活动。

活动

描述

EventDriven

这个活动用于由外部事件驱动的状态。EventDriven活动的第一个子活动必须实现IEventActivity接口。

SetState

指定了到另一个状态的迁移

State

在状态机中代表一个状态;可能包含其他状态活动。

StateInitialization

状态一进入就开始执行(不像EventDriven那样,需要等待外部事件),它可以包含其他活动。

WWF框架包含了一组活动(译者:活动说白了就是构建工作流的控件。活动和工作流的关系就象windows控件和form的关系),这些活动提供了各种丰富的功能。你可以使用这些活动来控制工作流的逻辑流程。

以下列出了WWF框架中的常用的控制逻辑流程的活动。

活动

描述

Listen

可使你的工作流包含一个依赖事件作出选择的分支,或者超时退出。

IfElse

依次检查每个分支的条件,一个满足条件的分支将被执行。

Parallel

可使你的工作流同时处理两个或两个以上不相关的操作。

Suspend

可使你的工作流暂停,以干涉一些包含错误条件的事件。

Terminate

可使你的工作流在接收到错误条件的事件时,立即终止。

While

可使你的工作流循环执行,知道条件不满足。

ConditionedActivityGroup

也叫CAGExecutes child activities based on a condition that applies to the CAG itself, and based on conditions that apply separately to each child.

EventDriven

这个活动包装了其他活动,这些活动会在指定的事件发生时运行。




在工作流中使用条件

翻译自:ms-help://MS.WinWF.v1.EN/WinWF_GettingStarted/html/541211f5-d382-4810-894f-71f00b34fa77.htm

你可以使用条件来控制工作流的行为。工作流引擎会判断条件,并依据判断的结果来决定之后的行为。

在工作流中有两种表达条件的方式:

l 你可以编写一个处理方法并返回一个布尔值。

l 你可以在工作流中定义一个规则。

你可以在工作流的运行期间动态更新条件规则,来改变工作流的行为。

你也可以通过创建一个策略类型的活动,来使用条件行为。

条件活动

l WWF提供了几个使用条件的活动:

l IFElse活动的分支,是基于条件判断的结果的。

l While活动将会持续循环的执行,知道条件判断为假。

l ConditionalActivityGroup活动将持续执行它的子活动,直到判断条件为真。CAG活动中的每个独立子活动都有一个“When”条件。只有在When条件为真时,活动才会执行。

l Replicator活动在判断条件为真时,完成他的执行。

你可以在自定义活动中使用条件。

注意:

条件规则只能是工作流类中定义任何公共成员——变量或者方法。而条件代码可以是是任何公共或私有的成员。




本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/12/31/309170.html,如需转载请自行联系原作者

相关文章
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(上)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……
|
调度 C# Windows
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……(下)
|
1月前
|
资源调度 编译器 Linux
Windows10系统安装Truffle框架,安装失败,提示:error An unexpected error occurred: “https://xxxxx
Windows10系统安装Truffle框架,安装失败,提示:error An unexpected error occurred: “https://xxxxx
74 0
|
3月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
68 0
|
3月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
182 0
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
245 0
|
3月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
58 0
|
3月前
|
Python Windows 内存技术
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
|
5月前
|
数据库连接 Nacos 数据库
nacos在windows系统下单机模式启动四部曲(2.1.2重置密码)
nacos在windows系统下单机模式启动四部曲(2.1.2重置密码)
523 0
|
6月前
|
固态存储 Windows
台式机的Windows10如何设置性能模式
【5月更文挑战第25天】台式机的Windows10如何设置性能模式
405 0