代码改变世界

WF 4.0,迎接变化

2008-11-09 00:45  Windie Chai  阅读(...)  评论(...编辑  收藏
今年的MVP Open Day和PDC的课程都介绍了WF 4.0的变化。在Tech Ed 2008北京分会场听了WF 4.0的课程并参加了相关动手实验后,发现WF 4.0的变化并不仅仅是升级那么简单,下面我就简单的讲一下关于WF4.0新特性的感受吧。
当然,虽然WF 4.0的变化甚多,我并没有完整的预览,而且由于它目前还没有发布,所以下面我提到的内容也有可能不会包含在最终发布版中,最终的WF 4.0是什么样子,就让我们拭目以待吧。

• 据说效率提高了10-100倍。

• 新的设计器完全基于WPF来展现,速度确实大有提高。

• 新增一种图:Flow Chart,我认为Flow Chart更复合我们设计流程的正常思维,试想一下,如果下一版本的SharePoint中的工作流也能基于WF 4.0,那么SharePoint Designer设计流程的能力将会得到非常大的提升。

• 新的Flow Chart和以前的Sequence以及StateMachine这三种图可以互相嵌套,可以简单的将这个功能理解为“子流程”,这无疑会让WF能够更加灵活的设计工作流。

• 活动之间不再使用依赖项属性的绑定来传递数据,在WF 4.0中,活动的输入输出属性叫做Arguments(参数),而且还可以为每个活动定义若干Variables(变量),活动就是通过绑定参数和变量来传递数据的。
我们知道,依赖项属性是在全局定义的,而变量则是有作用域限制的,就像编程语言中的变量作用域一样,理解起来非常简单,把活动想像成一对大括号就明白了。
通过使用变量,工作流就可以在需要的时候加载需要的变量即可,不用像依赖项属性一样将它们全部加载。

• 目前我们使用依赖项属性绑定时,我们只可以进行属性到属性的绑定。而WF 4.0在绑定时是可以输入Expression表达式的,比如:(variable1 * variable2).ToString()。这个改进确实不错,但希望最终版本的设计器会更加友好一些,至少要像目前的规则编辑器一样,弹出窗口,包含比较大的输入区域,最重要的是要支持智能感知。

• 代码编写方面,在动手实验中我简单的看了一下,发现WF 4.0中宿主只需要简单的实例化一个WorkflowInstance,然后调用这个实例Resume就可以启动了,并不需要实例化WorkflowRuntime,WorkflowRuntime的调用已经被封装了,这为我减轻了代码负担,但这并不意味着我们没法控制运行时了。

• 我们都天真的以为WF 4.0中的活动应该不会变化的,就算变化也应该像3.5那样增加几个活动而已,但事实是……WF 4.0的基础活动库包含了流控制、状态控制、规则控制、消息、数据库、SharePoint甚至PowerShell的相关活动。
虽然种类很多,但我个人觉得WF 4.0把SharePoint和PowerShell这些活动都包含进来似乎有些不太合适,这些活动还是应该由他们本身的平台来提供才对啊(像现在这样,由VSTO来提供SharePoint的相关活动)。如果不怕造成WF 4.0异常臃肿的话,干脆连Speech Server的活动也内置了得了。
于是我打开System.WorkflowModel.Activities命名空间想一看究竟,结果却没有找到几个熟悉的活动,下面是部分该命名空间下的类名,根据类名就可以推断出来功能,大家预览一下,发挥想象尽情猜测吧:
 ○ ActivityActionTrigger
 ○ ActivityActionTriggered
 ○ ActivityCompleted
 ○ ActivityFaulted
 ○ ActivityFlowEvent
 ○ Assign
 ○ Assign<T>
 ○ Break
 ○ CancellationScope
 ○ Catch
 ○ Catch<Texception>
 ○ Comment
 ○ Continue
 ○ CreateSharePointListItem
 ○ DbConnectionContext
 ○ DbQuery<TResult>
 ○ DbUpdate
 ○ Delay
 ○ DeleteSharePointListItem
 ○ DoWhile
 ○ DurableTimerExtension
 ○ DurableTimerStrings
 ○ Flowchart
 ○ FlowDecision
 ○ FlowElement
 ○ FlowEvent
 ○ FlowStep
 ○ ForEach<T>
 ○ GetSharePointListItems<TResult>
 ○ If
 ○ Interop
 ○ Loop
 ○ PowerShellCommand<TResult>
 ○ Sequence
 ○ SharePointConnectionContext
 ○ State
 ○ StateMachine
 ○ StateTransation
 ○ Switch<T>
 ○ Throw<TException>
 ○ TimerExtension
 ○ TryCatchFinally
 ○ UpdateSharePointListItem
 ○ While
 ○ WriteLine
从其中的Break、Catch、Continue、DoWhile、ForEach、If、Swith、TryCatchFinally和While等不难看出,WF大有将基本的编程语法移植过来的趋势,不过这些活动确实很实用。

• 此外WF 4.0的规则也进行了增强,但我并没有机会一览究竟,动手实验的虚拟机镜像也不允许复制,不过至少弄清楚一件事情,前段时间发布的Visual Studio 2010 CTP中的WF 4.0是个很原始很原始的版本,其设计器、工具箱甚至程序集都和我看到的版本有着很大的差异。


最后为大家共享一些资料:

• PDC的Sessions视频下载请访问我的这篇日志:http://www.cnblogs.com/xiaoshatian/archive/2008/11/01/1324216.html
• Tech Ed 2008的WF课程讲义下载请点击这里:http://files.cnblogs.com/xiaoshatian/TechEd2008BJWF.rar