技术开发 频道

探秘WF4 Beta2中工作流对象模型

  【IT168 评论】本文将讨论WF4 Beta2中的工作流对象模型,在.NET 4.0中工作流是变化比较大的一部分,希望那个通过本文能让大家对WF4 Beta2有一个全新的认识。

  随着Visual Studio2010 BETA2的发布,大家对.NET 4.0技术的研究热情随之高涨。在整个.NET 4.0所引入的新技术中,工作流可谓是变化最大的部分。WF4与WF3几乎可以看成是两个完全不同的产品。

  对于WF3的编程模型,已有相关的技术书籍介绍了,在网上也可以搜到有关的资源。但对于WF4,却几乎找不到任何深入介绍其对象模型的文章。

  我以Reflector作为工具,反汇编了WF4的源代码,通过仔细阅读,粗步理出了一个头绪,在本文中进行介绍,期望能起到一个抛砖引玉的作用,帮助大家深入地把握WF4的技术内幕。

  1 Acitvity的继承树

  在WF4中,Activity类是最顶层的基类。任何一个工作流都由至少一个Activtiy构成。以下是WF4中Activity的继承树:

图1 WF4中Activity的继承树

  在真实的工作流中,各个Activity可以相互嵌套,形成一个树型结构,最底层的叶子通常就是上图中最底层类(如CodeActivity)的实例。

  最顶层的Activity类提供了一个可以供子类重写的InternalExecute()方法:

internal virtual void InternalExecute(ActivityInstance instance,  
ActivityExecutor executor, BookmarkManager bookmarkManager);

        子类可以重写此方法,在此方法中实现各种功能,这个方法在WF4内部非常重要,许多东西都与它相关。

  为了方便地供开发者自定义业务处理逻辑,诸如CodeActivity之类最底层的类,另定义了一个抽象的Execute()方法:

protected abstract void Execute(CodeActivityContext context);

        当开发者自定义Activity时,就可以直接地重写此方法。

  简言之,工作流的运行就体现为Activity对象树中叶子节点Execute方法(或类似的方法,比如DynamicActivity是InternalExecute方法,AsyncCodeActivity是BeginExecute和EndExecute方法)的执行。

0
相关文章