工作流框架现在越来越流行了,流行自有它流行的道理。不过每一项技术都是有好有坏,它在解决了一定问题的同时自然也有它的缺点。每一项技术都是有它适合用的地方,没有更好,只有更适合嘛。
本篇博客就根据工作流小组研究的结果,加上小编自己的理解,介绍一下工作流的基本内容。博客中的实例开发环境为VS2012,有兴趣的小伙伴可以尝试一下。
工作流的本质是一种方法,用来归档包含在完成一个单元的工作中的活动。这句话可能有些拗口,简单来说工作流就是将工作流程化,适应于流性质的工作,比如请假或者财务审批。
工作流概念起源于生产组织和办公自动化,是针对日常工作中具有固定程序活动而提出的一个概念。就拿公司要购买器材为例,最开始的时候是一个人有这个器材的需求,然后提交书面申请,将申请一级一级上交审批。这个过程不但纸质申请容易破损和丢失,而且申请人还和各级审批人有很大的的耦合性,申请人需要操心需要交给哪个审批人,而且还要操心当前审批人的审批结果。
为了使这种近似于固定的流程自动化,工作流就应运而生。设计这么一套流程,申请人将申请提交后,他不需要知道各级审批人是谁,因为流程已经配置好了。然后该流程就会一级一级向下流,而申请人只需要等待结果就行了。
从上面来看,可以总结工作流的特点为以下几点:
1、极大地提高了工作效率
2、本身只是业务逻辑决定的一个事务流程
3、一旦启动,自动流转
4、具有事务的特性
5、流程节点灵活可配
6、符合面向对象的思想
按照工作流的流转过程来分,可以将工作流分为三种,分别是顺序工作流、流程图工作流、状态机工作流。本篇博客就介绍一下顺序工作流的创建,其余两种工作流的介绍和创建,请关注接下来的博客。
顺序工作流
顺序工作流是流转过程最简单的一种工作流,各个节点之间没有分支,只有顺序流转,节点的顺序决定了执行结果的顺序。下面展示一个小例子,实现顺序工作流。
在VS2012创建工作流控制台应用程序
这时在新建的项目中会出现两个文件,一个是Program类,用来做工作流的入口,main方法就在Program类中;另一个是Workflow1.xaml文件,这个就是用来设计工作流的。
下面为了分离顺序工作流和其他两种,我对Workflow1.xaml文件进行了重命名,改为Sequence.xaml。
打开Workflow1.xaml文件,出现工作流设计页面,在工具箱内有工作流已封装好的控件,拖拽到设计页面中就可以使用。下面演示WriteLine的控件,将WriteLine拖拽到设计页面中,然后拖拽第二个放在第一个下面,然后是第三个和第四个,这四个控件就自动组成了顺序工作流,就像下图。
在WriteLine控件中输入要显示的内容,每一个WriteLine控件就作为一个结点来执行。
下面再来看看Program类中的代码:
namespace SequenceWorkflow { class Program { static void Main(string[] args) { //实例化当前的工作流 Activity sequence = new Workflow1(); //执行要执行的工作流 WorkflowInvoker.Invoke(sequence); } } }
namespace SequenceWorkflow { class Program { static void Main(string[] args) { //实例化当前的工作流 Activity sequence = new Workflow1(); //执行要执行的工作流 WorkflowInvoker.Invoke(sequence); <span style="white-space:pre"> </span> //将Console框停留在桌面 Console.ReadKey(); } } }
到此为止,你的顺序工作流就成功执行了。怎么样,是不是很简单,动手试一下吧。
工作流之所以称为工作流,是因为它可以执行几乎一切流性质的事务。工作流启动之后,有工作流内部机制控制,各个节点会自动执行,不需要再手动完成。另外工作流也是很好地面向对象的框架,让各个节点人耦合性降低,但是一旦一个流程启动,再改动它就难了,我认为这也是一点点的小缺点。