工作流技术分析
前言
基于上篇文章我决定写篇文章对工作流技术进行剖析和解读,授之以鱼不如授之以渔。所以决定讲讲原理,以便让大家对工作流有更深的了解。最早工作流是由外国人研发,慢慢被引近国内,我接触比较早的是Java的工作流如Jbpm、osworkflow、activiti都是比较成熟的解决方案,相比而言,采用Java研发还是比较幸福,不像C# 那时候还没比较好的成熟解决方案,导致我们在工作流技术框架方面不得不采用Java的解决方案。由于公司的原因,最后我们业务部分采用C#语言编写,流程部分采用Java下osworkflow技术方案,将Java中osWorkflow工作流封装成WebService服务与C#这边进行交互模式,增加实施的难度。微软发布的工作流产品(WF),我们也研究使用过这款产品,这款产品只包含引擎和一个C/S版的流程设计器,并不支持在线设计流程。在使用方面,我们并没有用好WF,不知道是不是技术原因,时常报些莫明其妙的错误,使用起来并不太稳定,最后不得不放弃转而使用Java的解决方案。目前市面上有很多公司或个人研发的工作流产品,有的是完全遵循国际上制定的工作流标准实现,而有的则并没有遵循标准,这两种实现暂且不论好坏,只要能解决自已的需求,在我看来,那就是好的产品。中国有位领导说过,不管白猫黑猫,能抓到老鼠的就是好猫。
工作流背景
引用上篇文章解释工作流产生背景以及使用场景。工作流是为解决现实中繁杂多变的业务审批流程,应运而生的一种技术。在现实中好多公司、政府、军工单位中审批业务流程是频繁变更,特别在研发ERP信息管理系统,或多或少都存在这种需求。工作流技术的出现为这种需求提供了一种更好的解决方案,将大大的减轻研发人员的工作量。在工作流技术未出现前,研发人员为应对这种情况是疲于应付,精疲力竭。通常都是通过硬性编码对固定的业务流程,进行针对性编码,这种编码方式,就很不适应业务频繁的变更,造成开发人员这种被动的局面。
工作流产品一般包含流程引擎和流程设计器两个部分,这两部分是工作流核心部件。流程引擎提供对流程解析,并驱动业务流程的流转。流程设计器则提供图形化操作方式,通过画图方式定义工作流审批流程,最终生成工作审批流程定义的XML文件。
流程设计器
市面上通常都是提供的在线流程设计器,在线的流程设计器主要基于Flash、SL、H5、SVG这四种技术实现。这四种技术实现画图各有优缺点。Flash、SL这两种是必须要在客户端安装插件、学习成本也不低,这两种技术在逐步末落。H5、SVG这两种技术在近年是越来越流行,但是对老浏览器不支持。选择哪种技术实现方式主要看目前自已的需求。也有些比较优秀JS开源画图框架如D3、SVGJS、Jsplumb等等,本质上都是基于上面几种技术方式实现的,有兴趣的可以自已去了解。
流程引擎实现原理
在系统中为了反映与现实的送审流程,工作流框架中通常都采用XML对送审流程进行描述定义。然后,由工作流引擎对XML数据结构解析,并将定义的流程节点和关联信息都序列化存储到数据库里。在序列化过程中将与业务表单建立关联,后续将依据上述定义的流程,进行业务上的流转。市面上工作流框架基本上都是基于这种实现方式。当然我并没有准备引入那些高大上的理论进行讲解,因为我觉得那些专业术语让人听得都生畏,什么工作流泳道模型、顺序、状态机、事件等等这些专业术语的解释,有兴趣的可自行了解。其实,还涉及到到表单流转,这个话题等下次有时间,再来说道说道。
开源工作流地址:https://github.com/chengderen/Smartflow-Sharp
结语
上述是我对流程定义、原理和实现,进行解读和分析。由于本人技术水平有限,有理解的不对地方,还请指教。写文章真的太折磨人,费神费力,希望对大家有所帮助。顺便教大家一个排版的技巧,我也是前几天才知道的,写文章最好是先在Word文档中先调整好格式和排版,然后导出Html格式的文档,这样你的文章排版和格式看起来很舒服,不会错乱。