简单对比微软WorkFlow3.5与4.0的差异
2012-10-19 14:45
381 查看
转自:http://www.codesky.net/article/201008/123777.html
最近要研究下WF4.0的相关内容,将自己认识的、理解的写下来与大家共勉,有兴趣的朋友可以一起探讨一下。
相对于之前的3.0、3.5中的WorkFlow来说,4.0进行了很大的变动,包括流程设计工具、支持的活动的类型集合、工作流的内部的模型、执行引擎等等。对于其中的活动模型、执行引擎等内容,属于比较理论而且深入的内容,我会在研究到一定程度之后与大家分享,希望通过本系列文章能够和大家一起对WF3.0和4.0的区别和联系有个全面细致深入的理解。
本文主要是对3.0和4.0之间的区别做了下简单的介绍,熟悉或者精通WF的可以跳过。
既然3.0、3.5中的WorkFlow和4.0不同,那么我们首先来对比一下。首先从设计工具说起,分别用3.5(图1)和4.0(图2)创建一个顺序工作流,我们可以看到下面的流程设计界面:
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' style=" height=526 width: 530px; height: 339px?>
图1(3.5中的流程设计界面)
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' alt=" height=298 ?>
图2(4.0中的流程设计界面)
从图中我们不难看出区别,3.5中顺序工作流初始化默认有个开始和结束节点,4.0默认则是一片空白。个人感觉这是一种观念的改变,工作流始于开始、终于结束是我们传统思维,然而开始结束本身就是一个虚活动,更像是边界的限定,开发人员了解,用户却不了解;4.0所给人的信息更符合用户思维,一个流程始于活动而终于活动。基于设计出的流程,让开发者、业务建模人员、用户之间能够相互交流,分析师能够对流程进行优化,决策者能够更好的决策是一种趋势,而这种趋势必然要跨出的一步就是流程设计的可被大众理解化。
呵呵,有点扯远了。我们接着看看3.5(图3)和4.0(图4)支持的活动类型:
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' alt=" ?>
图3(3.5支持的活动类型)
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' alt=" ?>
498)this.width=498;this.width=498;'
onmousewheel = 'javascript:return big(this)' alt=" ?>
图4(4.0支持的活动类型)
可以看到4.0支持的活动类型不仅更多,而且分类更细致。不仅在controlFlow和原始类型中提供了基础的活动,用来定制基本的流程,而且在FlowChart里面提供了能更加灵活的定制流程的活动类型,同时还提供用于消息、事务、错误处理等功能的活动
接下来看看引用的类库以及项目文件的目录结构:
.NET 3.5中引用了以下类库:
System.Workflow.Activities:定义了工作流可以创建、允许的活动集合
System.Workflow.ComponentModel:提供创建活动、工作流的基类、接口以及核心建模构造
System.Workflow.Runtime:提供一些类和接口可以控制工作流运行时引擎以及流程实例的执行
默认创建的工作流是Workflow1.cs,对于设计完的流程是用类文件的形式进行描述,即Workflow1.designer.cs,执行代码放到Workflow1.cs中。
通过ViewCode可以看到两个类的代码为:
.NET4.0中WorkFlow引用了以下类库:
System.Activities:包含创建和使用活动所需的所有类。使用此命名空间中的类可以定义活动、输入输出数据和变量
System.ServiceModel:包含用于生成服务和客户端应用程序所需的类、枚举和接口,这些类、枚举和接口可以用于生成大范围的分布式程序
System.ServiceModel.Activities:使用此命名空间中的类可以从工作流接受消息,或者向工作流发送消息,定义工作流服务的时候可以使用这些活动
默认创建的是Workflow1.xaml,定义完的流程是用xml的方式进行描述。
通过ViewCode,我们可以看到WorkFlow1.xaml中的内容:
可以看到,对于类文件、命名空间的引用,xml使用的schema限定等都在WorkFlow1.xaml中进行了描述。
.NET3.5中Program.cs中代码如下:
代码中对流程实例完成、流程实例终止进行了事件的处理,然后通过用户定义的Workflow1创建WorkflowInstance,调用instance.Start()开始执行流程。
.NET4.0中Program.cs代码如下:
代码中创建了一个Workflow1的实例,然后通过WorkflowInvoker.Invoke来开始执行流程。
通过对比不难发现,4.0的流程创建执行更简洁,也更符合思维习惯。以请假流程为例,请假人首先会填写个请假条,然后报领导审批就是;用工作流来描述这个过程就是,首先定义个请假流程,包括请假发起环节和请假审批环节,流程定义好之后,谁想请假了,填写请假表单,提交到领导审批环节即可;如果用程序来描述那就是设计一个请假流程(类、xaml等),创建实例并执行。我们很有可能会忘记一些事件的定制,然而有些情况下这往往会导致流程出现一些问题,例如3.5中我们需要定制两个事件,创建并开始流程实例的代码也比较繁琐。
总起来说4.0更灵活,更全面,更符合发展趋势。
文章比较浅,希望大家能通过这篇文章对3.0和4.0Workflow之间的不同有个感性的认识。
最近要研究下WF4.0的相关内容,将自己认识的、理解的写下来与大家共勉,有兴趣的朋友可以一起探讨一下。
相对于之前的3.0、3.5中的WorkFlow来说,4.0进行了很大的变动,包括流程设计工具、支持的活动的类型集合、工作流的内部的模型、执行引擎等等。对于其中的活动模型、执行引擎等内容,属于比较理论而且深入的内容,我会在研究到一定程度之后与大家分享,希望通过本系列文章能够和大家一起对WF3.0和4.0的区别和联系有个全面细致深入的理解。
本文主要是对3.0和4.0之间的区别做了下简单的介绍,熟悉或者精通WF的可以跳过。
既然3.0、3.5中的WorkFlow和4.0不同,那么我们首先来对比一下。首先从设计工具说起,分别用3.5(图1)和4.0(图2)创建一个顺序工作流,我们可以看到下面的流程设计界面:
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' style=" height=526 width: 530px; height: 339px?>
图1(3.5中的流程设计界面)
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' alt=" height=298 ?>
图2(4.0中的流程设计界面)
从图中我们不难看出区别,3.5中顺序工作流初始化默认有个开始和结束节点,4.0默认则是一片空白。个人感觉这是一种观念的改变,工作流始于开始、终于结束是我们传统思维,然而开始结束本身就是一个虚活动,更像是边界的限定,开发人员了解,用户却不了解;4.0所给人的信息更符合用户思维,一个流程始于活动而终于活动。基于设计出的流程,让开发者、业务建模人员、用户之间能够相互交流,分析师能够对流程进行优化,决策者能够更好的决策是一种趋势,而这种趋势必然要跨出的一步就是流程设计的可被大众理解化。
呵呵,有点扯远了。我们接着看看3.5(图3)和4.0(图4)支持的活动类型:
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' alt=" ?>
图3(3.5支持的活动类型)
498)this.width=498;this.width=498;' onmousewheel = 'javascript:return big(this)' alt=" ?>
498)this.width=498;this.width=498;'
onmousewheel = 'javascript:return big(this)' alt=" ?>
图4(4.0支持的活动类型)
可以看到4.0支持的活动类型不仅更多,而且分类更细致。不仅在controlFlow和原始类型中提供了基础的活动,用来定制基本的流程,而且在FlowChart里面提供了能更加灵活的定制流程的活动类型,同时还提供用于消息、事务、错误处理等功能的活动
接下来看看引用的类库以及项目文件的目录结构:
.NET 3.5中引用了以下类库:
System.Workflow.Activities:定义了工作流可以创建、允许的活动集合
System.Workflow.ComponentModel:提供创建活动、工作流的基类、接口以及核心建模构造
System.Workflow.Runtime:提供一些类和接口可以控制工作流运行时引擎以及流程实例的执行
默认创建的工作流是Workflow1.cs,对于设计完的流程是用类文件的形式进行描述,即Workflow1.designer.cs,执行代码放到Workflow1.cs中。
通过ViewCode可以看到两个类的代码为:
//Workflow1.cs public sealed partial class Workflow1 : SequentialWorkflowActivity { public Workflow1() { InitializeComponent(); } } //Workflow1.designer.cs partial class Workflow1 { #region Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> [System.Diagnostics.DebuggerNonUserCode] [System.CodeDom.Compiler.GeneratedCode("", "")] private void InitializeComponent() { this.Name = "Workflow1"; } #endregion }
.NET4.0中WorkFlow引用了以下类库:
System.Activities:包含创建和使用活动所需的所有类。使用此命名空间中的类可以定义活动、输入输出数据和变量
System.ServiceModel:包含用于生成服务和客户端应用程序所需的类、枚举和接口,这些类、枚举和接口可以用于生成大范围的分布式程序
System.ServiceModel.Activities:使用此命名空间中的类可以从工作流接受消息,或者向工作流发送消息,定义工作流服务的时候可以使用这些活动
默认创建的是Workflow1.xaml,定义完的流程是用xml的方式进行描述。
通过ViewCode,我们可以看到WorkFlow1.xaml中的内容:
<Activity mc:Ignorable="sap" x:Class="WFConsoleAppTest.Workflow1" sap:VirtualizedContainerService.HintSize="240,240" mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:s1="clr-namespace:System;assembly=System" xmlns:s2="clr-namespace:System;assembly=System.Xml" xmlns:s3="clr-namespace:System;assembly=System.Core" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:st="clr-namespace:System.Text;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" />
可以看到,对于类文件、命名空间的引用,xml使用的schema限定等都在WorkFlow1.xaml中进行了描述。
.NET3.5中Program.cs中代码如下:
class Program { static void Main(string[] args) { using (WorkflowRuntime workflowRuntime = new WorkflowRuntime()) { AutoResetEvent waitHandle = new AutoResetEvent(false); workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); }; workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e) { Console.WriteLine(e.Exception.Message); waitHandle.Set(); }; WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFSequenceTest.Workflow1)); instance.Start(); waitHandle.WaitOne(); } } }
代码中对流程实例完成、流程实例终止进行了事件的处理,然后通过用户定义的Workflow1创建WorkflowInstance,调用instance.Start()开始执行流程。
.NET4.0中Program.cs代码如下:
class Program { static void Main(string[] args) { WorkflowInvoker.Invoke(new Workflow1()); } }
代码中创建了一个Workflow1的实例,然后通过WorkflowInvoker.Invoke来开始执行流程。
通过对比不难发现,4.0的流程创建执行更简洁,也更符合思维习惯。以请假流程为例,请假人首先会填写个请假条,然后报领导审批就是;用工作流来描述这个过程就是,首先定义个请假流程,包括请假发起环节和请假审批环节,流程定义好之后,谁想请假了,填写请假表单,提交到领导审批环节即可;如果用程序来描述那就是设计一个请假流程(类、xaml等),创建实例并执行。我们很有可能会忘记一些事件的定制,然而有些情况下这往往会导致流程出现一些问题,例如3.5中我们需要定制两个事件,创建并开始流程实例的代码也比较繁琐。
总起来说4.0更灵活,更全面,更符合发展趋势。
文章比较浅,希望大家能通过这篇文章对3.0和4.0Workflow之间的不同有个感性的认识。
相关文章推荐
- 简单的内容差异对比函数
- 微软企业库4.0 For vs.net2008(.net framework 3.5)下载
- Windows 8系统默认开启的.Net Framework版本是4.0,而部分用户可能需要使用到3.5或以下版本,简单添加方法
- .net 3.5和4.0的一个小差异引起的问题
- 7种结构型设计模式简单对比
- Oracle 和 mysql 的一些简单命令对比参照
- Python3.x和Python2.x的差异对比
- 简单对比git pull和git pull --rebase的使用
- c#3.5关于JSON简单操作的实用帮助类(泛型实现)
- 微软面试简单算法题目
- Java实现CSV文件差异对比
- 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较
- 四大常见XML类型的生成和解析方法详解(介绍+优缺点对比+示例+说明)==> 简单实用
- Redis 2.6 Redis 2.8 与ssdb的简单对比
- ESX 3.5 简单学习笔记
- 青铜器RDM与微软Project计划进度管理对比分析
- 一起谈.NET技术,关于C#线程,线程池和并行运算的简单使用和对比
- 学习笔记:11种行为型设计模式简单对比
- .net framework 3.5 和 4.0 的结构图以及Namespaces参考,强烈推荐下载了解!
- sparkStreaming与storm的简单对比