浏览 1692 次
锁定老帖子 主题:熬夜设计工作流的实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-03
最后修改:2009-11-03
首先声明,有点标题党了~我熬夜做的不过是个演示程序罢了,为了应付学校项目的中期检查,演示工作流的编排和执行,仅具有“娱乐”价值,没有任何商业价值,估计也算不上“工作流”。演示用的方法调用就是简单的加法、减法和乘法。 首先,我有一个图形化界面(借用的BPEL Designer的界面)用来绘制工作流程,如下图所示: 接着,向工作节点添加调用的方法:右键节点->添加方法; 最后做完图后,选择工具栏的“执行”按钮,即可按绘制的流程顺序执行下来。
首先说数据结构。我定义的一个工作就是图上的一个节点,节点用来实现绘制功能的数据沿用这个设计工具本来的格式。为了实现流程的执行功能,我将原先节点的前驱后继只能有一个的链表式结构改成了用List实现,这样前驱后继都可以是多个了;添加“结果”和“操作”参数,来记忆执行该工作的结果以及描述该工作的操作。
然后就是算法了。开始为这问题挺头疼的,后来偶然听说了“拓扑排序”,揣摩了一下,豁然开朗(编辑器会将画板上所有的节点存入一个Map中): 1.从Map中遍历出所有前驱为零的节点压栈; 2.从栈中推出一个,执行该节点的操作,将结果存入“结果”参数; 3.扫描该节点的一个后继节点,查看它的所有前驱节点的’结果“参数是否为空?不为空转步骤4,否则返回上一层扫描。 4.执行该节点,对该节点转步骤3操作。 (头一回像算法书上写的那样描述算法,如有不妥,请前辈指出。)
经过简单的测试,对于最终汇集到一个工作中去的工作流,即截图所示的方式,该算法似乎都没问题。
天亮了,是不是该趴一会了…… 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-06
俺没弄懂楼主的意思 我只看到一颗树的的简单遍历而矣
|
|
返回顶楼 | |
发表时间:2009-11-06
qiren83 写道 俺没弄懂楼主的意思 我只看到一颗树的的简单遍历而矣
嘿嘿,其实是没什么,就节点包含了方法的调用信息,遍历到该节点,就会执行相应方法调用…… |
|
返回顶楼 | |