Mr.Victor

梦里不知身是客,一晌贪欢!
posts - 21, comments - 7, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

WF4.0系列教程——前言:认识WF

Posted on 2011-12-03 19:12 Mr-Victor 阅读(2368) 评论(5) 编辑 收藏

  首先说一下,我是个还未毕业的学生,目前在成都一家公司上班,之前也做过一些项目,主要是C++和嵌入式方面的。由于实在不想在学校耗着,所以就先出来上班了,公司目前的项目需要用.NET开发,是一个关于工业流程监控的项目,主要用到的技术是:WCF做底层设备与服务器、服务器与客户端的通讯,WPF做客户端呈现,WF做工作流控制,以及其他一些诸如EF、驱动等技术,我负责WF这一块。

  由于之前没接触过.NET,对于C#也只是上过这门课,未深究过。来公司花了4天时间看了一下C#的语法而已,对于我而言,语言只是个工具,上手起来也比较快。然后就开始学习WF,说实话,WF的资料少得可怜,而且WF3.X和WF4.0差别也很大,园子里的WXWinter是个WF牛人,我是看他写得《WF4.0技术文章》http://www.cnblogs.com/foundation/category/215023.html和MSDN上手的,《WF4.0技术文章》有很多例子,MSDN上有WF框架说明,所以我是将两者结合起来学习的,写这个系列教程主要是为了对这一个月来的学习情况做一个总结,如果能够帮助更多的朋友学习WF那当然更好不过了,由于我真的是这方面的菜鸟,所以难免有错误的地方,如果有幸园子里的高手们看到有错误的地方,欢迎指正,大家多讨论交流才能进步得更快,总之,一家之言,欢迎拍砖。

  好了,现在进入正题,首先我们来认识一下WF。

  WF,也就是Windows Workflow Foundation,这里先说一下工作流(Workflow)。工作流不是个新东西,工作流的概念很早就提出来了的,关于它的历史可以看看百度百科上的解释,反正它就是一种编程概念,通过将工作分解成定义良好的任务或角色,按照一定的规则和过程来执行这些任务并对其进行监控,达到提高工作效率、更好的控制过程、增强对客户的服务、有效管理业务流程等目的(这是百度百科上的解释),在我看来,工作流就是一种程序逻辑由用户自定义的一种概念,在OA系统、行文审批以及流程控制等方面用得比较多。比如说,一套行文审批系统,如果我们不用工作流会怎么开发呢?首先要去了解这套行文审批是哪个客户或者机构使用的,然后根据那个客户或者机构里的行文审批流程来具体写代码,比如请个假,首先要将请假条发送给项目组长,项目组长同意了要发给部门负责人,然后是经理等等,我们会根据这个流程来写代码。那么要是这个行文审批系统又要给另一家公司使用呢,而这家公司的流程不一样,是不是又要重新组织代码逻辑结构呢?这就是我们说的硬代码,全都写死了,那么维护起来肯定特别麻烦,要是用户说,我们公司最近内部出现了些调整,你那个行文审批系统要修改。那麻烦就大了,要动大手术的,公司光拿精力来维护这套系统就差不多了。

  在这里,有人肯定会说,你怎么这么笨啊,可以写些配置信息啊,或者说可以弄些人机交互的东西啊。对的,这里我们就用到了工作流的概念了,其实我们或多或少的都用到过工作流,比如拿最简单的HelloWorld来举例,我们可以在控制台程序里添加一句:
  Console.WriteLine("HelloWorld");
  启动程序,控制台就会输出一句"HelloWorld",如果我们的代码如下:
  string key = "123";
  if(Console.ReadLine() == "123")
    Console.WriteLine("Hello World");
  else
    Console.WriteLine("error");
  像上面这段代码,当启动程序时,程序会停住来等待你的输入,这就是一个人机交互了,你要是隔个半年(只要电脑不坏)再输入,它一样会执行下去,这也是个工作流的例子。但是具体的项目中肯定不会有这么简单的流程,对于具体项目而言,我们希望流程能由用户自己定义,而且是可视化的,支持各种复杂流程,具有安全可靠性,能够跟踪流程的执行情况等等,那么这个时候就该介绍WF了。

  WF是微软根据工作流的思想开发出来的一套工作流编程框架,类似的框架还有很多,WF让程序具有更高地灵活性,具有更好的人机交互能力,也让你开发出来的程序能够适应更多现实场景。最初我接触WF的时候最大的疑问在于,怎么让用户来使用我的工作流程序啊,用我们以往惯有的思维,我们程序员负责开发,用户只需要使用就是了,用户只需要会一些基本的计算机操作就可以了啊,但是现在用WF来开发,难道用户还必须学习工作流么?答案是:是的。

  WF基本上颠覆了我们以往的编程思维,以往的程序逻辑结构全部是由我们程序写死了的,我们为用户提供多少种功能或者说逻辑,用户就只能使用这么多种,而WF程序才是我们以往常说的“搭积木”式的编程,在这里面角色有些调换,我们以往说的面向对象、COM组件、代码复用性等等是搭积木式的,但这是针对程序员而言的,而现在,搭积木的活交给用户来做,我们程序需要做的是制作积木,为用户搭积木提供一个环境,然后用户将积木搭好之后,提供一个积木的安全的执行环境,也就是为工作流的执行提供一个稳定安全的环境。所以说,用户需要学会怎么搭积木,需要学会怎么配置各种积木的参数等等。

  上面说到的“积木”在WF中叫做Activity,你可以翻译为“活动”,一个活动也就是一个功能模块,微软的WF提供了一些内置的活动,比如最基本的开发语言当中的If...Else,While,Do...While,For循环等等,当然微软提供的这些内置活动肯定不能满足我们实际项目中的需求,我们还可以自定义活动,将我们项目中实际的功能封装成活动,以供用户来搭建工作流。

  WF中还有很多高级功能,比如持久性、跟踪、WF服务等等,这些待到我们以后的章节中来讲。总之,对于我们程序员来讲,需要学习工作流怎么搭建,怎么在自己的应用程序里承载工作流设计器,怎么自定义活动,怎么提供安全可靠的工作流执行环境,以及怎么优化工作流执行期间的性能等问题,而用户也需要学习怎么来设计工作流,当然这是用户自己的事了,作为程序员我们就负责我们应该掌握的东西就好了。

  之后的章节我会先介绍WF内置活动的使用,然后介绍更深层次的东西,在这期间我也要更深入的了解WF才行,总之,WF的目的和整个框架的概述大致就是如此了,我之前也没怎么写过东西,我觉得这是个好的学习方式,所以希望可以跟园子里的高手们多多交流,共同进步,这是我的QQ号:294636255,欢迎指正错误,谢谢!