[原创]当前工作流设计中面临的一些问题
最近在国内一个叫E8工作流设计器的演示动画中,看到了一个流程,这个流程模型比较特殊,对比原来我们常见的普通流程模型,这个流程模型是比较奇怪的(说是奇怪,其实就是说这个流程图的图模型不是我们常见的20种流程模型之内的,但是20种模型真的就足以覆盖所有的流程模型吗?)
说到这里,我结合近年来做工作流系统设计遇到的类似情况,发现一个普遍存在的矛盾,我们给用户提供一个可以自由设计流程的设计器,那么用户就一定(不是可能,是一定)会用设计器画出各种各样的千奇百怪的流程图出来,除非我们事先就制定一个所谓的规范(类似XPDL,JBPL等)来约束用户的自定义行为,使其用流程设计器设计出来的自定义流程图是我们的流程引擎能够解析并正确处理的,这种事先制定流程规范的方式就是国外工作流系统设计普遍采用的方式,在最开始我一直认为(可能不仅仅是我)老外这样做,无非是想利用这些规范来形成行业垄断,纯粹是一种商业行为,是为了排挤竞争对手而搞的东东,但是现在看来,这种通过事先制定规范的方式不仅仅是出于商业上的考虑,而同时也是出于技术上和设计上的考虑,因为如果容许用户随意设计出各种各样的流程,那么这些各式各样的流程图是否都是可以被后台引擎所识别,所解析,所控制呢?
答案是否定的,也就是说我们不太可能设计开发出一个功能如此强大的引擎来处理所有的可能出现的用户自定义流程图(其实我个人开始认为是可以的,甚至想用人工智能来做,到现在这个想法也没有完全消失,嘿嘿),即使可以,这种引擎设计和开发起来都比较困难,从商业上来讲,成本会非常非常高,为了解决这不到5%出现几率的变态流程图的问题而设计的引擎模块的开发成本会占到整个系统开发总成本的50%甚至更高,这对绝大部分国内的软件开发企业来讲,都是无法接受的(开源项目组是否能够接受,我不敢乱说,但是jwfd就打算做这样的引擎出来,反正都是搞科学技术探索,失败了也无所谓,但是企业就不一样了,企业要生存,就必须考虑成本和效益)。。。。。。
那么这个矛盾是我们做流程设计遇到的一个问题,我们叫它A问题,而由A问题引出的另外一个问题,要解决上面A问题,除了制定规范来约束用户的自定义行为之外,那就需要加强流程引擎的设计,而我们现在看到得是包括微软WF在内的很多大型工作流平台系统都打算把这个问题推给流程系统开发人员-让流程设计人员自己来写用于驱动和控制流程图的引擎控制算法或者模块,而这和我们一开始设想的出现了些矛盾,包括我在内的很多工作流系统开发者都有这样的看法,即理想状态下流程引擎应该能够自动化的处理由设计器设计出来的各种流程,注意是自动化,那么现在的关键问题就集中在这个自动化三个字上面,如果不能够自动,而是手动,那么工作流系统的很多卖点就大打折扣了,但是如果因为要实现流程控制的自动化而又不得不限制用户的自定义设计,这样也会使用户感到不满意,也会影响商业上面的销售,在国内出现如此多工作流产品的以至于各个厂家开始打价格战的时候,我们是否应该考虑下把上面讲的那个自定义规范和自动化处理的矛盾进行一些调和呢?即一方面增强流程控制的自动化,而另外一方面在设计器上面对用户的设计行为做一些规范性的限制,打句官腔就是两手抓,两手都要硬,同时在这两个方面加强,矛盾就会逐渐化解,当然这个矛盾不可能短期内就完美的得到解决,这就需要大家一起多探讨,多商量,多思考,多做实事,少打官腔。。。
这位WXWINTER同志在他的博客中,提出了规则引擎在工作流设计中的应用,这点比较有趣。。。。对于并行路由的选择和算法,应用规则引擎是个不错的思路。。。。。 24 楼 comsci 2009-11-08 工作流给用户自定义会对流程运行控制带来一定的难度,这就导致流程运行自动控制器的出现,如果工作流不给用户提供自定义,仅仅面向程序员等开发人员,那么流程运行的自动控制部分就变成开发人员自己编写的流程运行控制模块,总之,这个这个自动运行控制模块是躲不掉的。。。。。。。 25 楼 linliangyi2007 2009-11-08 comsci 写道工作流给用户自定义会对流程运行控制带来一定的难度,这就导致流程运行自动控制器的出现,如果工作流不给用户提供自定义,仅仅面向程序员等开发人员,那么流程运行的自动控制部分就变成开发人员自己编写的流程运行控制模块,总之,这个这个自动运行控制模块是躲不掉的。。。。。。。
为此,我专门开发了IK-Expression表达式引擎。从实用层面上看,最终用户对流程的修订是很有限的,给他们几个下拉框,或者选择框,最多一个写简单算式的输入框,就能够满足绝大多树的需求了。个人工作经验。 26 楼 comsci 2009-11-09 linliangyi2007 写道comsci 写道工作流给用户自定义会对流程运行控制带来一定的难度,这就导致流程运行自动控制器的出现,如果工作流不给用户提供自定义,仅仅面向程序员等开发人员,那么流程运行的自动控制部分就变成开发人员自己编写的流程运行控制模块,总之,这个这个自动运行控制模块是躲不掉的。。。。。。。
为此,我专门开发了IK-Expression表达式引擎。从实用层面上看,最终用户对流程的修订是很有限的,给他们几个下拉框,或者选择框,最多一个写简单算式的输入框,就能够满足绝大多树的需求了。个人工作经验。
嘿嘿,去年自己用antrl写了一个语法解析器,早知道就用您的作品了,哎,又造了一个轮子,我总喜欢自己造轮子。。。请您多多指教
============================================================================
本模块简称JGAM 是 jwfd GrammarAnalysis module (JWFD语法分析模块) 的缩写
用于JWFD或者其它流程系统中处理用户自定义的公式和脚本语言的模块
本模块使用开源软件ANTLR-3.0为基础,经过COMSCI对语法文件的修改而成,适用于各种流程引擎,可以结合JWFD使用也可以嵌入到其它JAVA系统中使用
使用方法:
用户只需要在自己的系统中调用GrammarInterface类中的ScriptAnalysis()的方法即可,通过在 ScriptAnalysis()方法中把string参数STR赋值为公式或者脚本
具体公式和脚本例子请参考代码中GrammarInterface类的方法说明
请将压缩包中的antlr-3.0.jar文件放在项目的JAR库中...
请用户根据项目具体情况自行修改类的package路径,默认路径为 org.jwfd.workflow.GrammarAnalysis
=======================================================
下载地址 http://download.csdn.net/source/1777990
27 楼 comsci 2009-11-11 实际上,如果一个自定义流程设计器交给用户设计流程,用人工的方法设计出来的流程图的规模是非常有限的,如果流程规模庞大,节点数量大,连接复杂,那么这种人工设计流程图的方式是否还可以进行下去,就值得进一步的探讨了,如果到时候这种方式不行,怎么办呢?
我想的办法是-通过用户给工作流系统制定若干个需求,流程系统根据需求,并结合事先输入的组织机构和权限结构,调用若干算法,在流程展示版面上面显示出系统自动生成的流程图,然后由用户根据实际情况对该流程图进行微调,直到满意为止,流程在运行过程中,系统和用户可以根据情况对流程进行实时的调整,包括拓扑结构的调整,权限的调整,内置脚本的调整。。。。。 28 楼 comsci 2009-11-21 这篇文章的核心是阐述一个矛盾,并提出解决这个矛盾的方法。。。 29 楼 terryh 2009-11-22 linliangyi2007 写道嗨~~一看就是数学没学好的。
从FSM有限状态机--》无限状态机--》图灵机,计算机的数学理论证明,楼主要的那种流程引擎在现有的计算机上是不可能的。
所谓的工作流模型实际上都是状态机的一种子集,并不是楼主想的为了垄断而产生的东西。说道垄断,就要说说开源,这点恰恰是国外比国内做好太多了。
倒是觉得Fireworkflow做的很务实。
第一次发帖,不谈技术。不过要先鄙视一下linliangyi2007,学会说话才能走得更远。