Workflow逻辑模型设计思考

设计思考:
1. LogicModel层很重要,其结构的组织直接影响到UI层绘图方式和Workflow-Engine层运行。
2. 初期的设计如果没有做好,会给后面的实现、扩展带来很大的不便。但是,任何前期的设计都不能说做到完美,所以,反复的过程是必需的。只是设计时需尽量考虑更多的因素。
3. LogicModel层的地位:




4. 所以LogicMoel层的设计需要尽量使UI层的绘图操作方便转化为Model数据进行保存,并且尽量使Engine层运行时方便从LogicModel层读取运行控制信息。

5. XPDL标准中(Shark):
SHARK says:
When some process is instantiated from its XPDL definition, it reads definition to create process variables (based on defined workflow relevant data in XPDL -you can follow the code, and you will get to the SharkUtilities class where the creation of variables based on its XPDL definition is done). It also finds the starting activity(ies) based on XPLD definition, and instantiates them, ... when some activity instance finishes, it notifies the process, and then it consults the XPDL to see where it should go next (based on variables and transition conditions) ...

Activity:
Tool: 工具,调用外部应用程序,类似于Primitive活动,是真正作出动作的节点
Route: 虚活动,只作流程控制,用于多条件分支,类似switch…case…语句
Subflow and Block: 组合多个活动,块或子流程

Transition: 类似与If…else…语句

6. 类似于Micro-workflow方式(Micro-workflow混淆了activity和container,下面的描述方式更清晰):
Activity:
Primitive: 原始动作,其中通过ToolAgent调用外部应用程序或DLL

Activity Container(是Activity的子类):
Sequence: 顺序动作组合,每个Process或SubProcess包含一个整体Sequence
Conditional: 条件动作,其中包含测试条件、分支Activity(IfBranchActivity, Else…, ElseIf…)
Loop: 循环动作,其中包含测试条件、局部变量初始化、循环体
Concurrence: 并发动作,其中包含分支Activity(BranchActivity);是否需要Join?

Transition: 不需要,有前面四种ActivityContainer可以包含所有程序设计流程中出现的流程控制

7. 上述两种实现方式对比(第一种简称XPDL方式,第二种简称SMWF方式):
(1).XPDL方式侧重于将Activity原子化,完全通过Transition和Route来控制流程跳转。SMWF方式侧重于将流程控制模块化,提供一个完整的流程控制所需要的顺序、条件、循环等流程控制方式,这些流程模块也同时作为Activity容器。
(2).由SMWF方式实现的工作流,可以比较容易的转化为XPDL方式。然而XPDL方式的工作流不太容易转换成SMWF方式的工作流(如果其中出现类似于goto乱跳转的情况,则更麻烦)。
(3).并发支持(fork,join):
(4).参数传递:均可采用全局变量传递。SMWF可以额外增加参数传递线路,图形化参数传递。
(5).UI图形化:SMWF图形化起来形成多层效果(不过也可以很直观地理解成流程),XPDL图形化起来是流程效果。
(6).XML描述方式(file format):SMWF较简洁直观,XPDL不太直观。
(7).Engine实现:SMWF较简便,只需递归读取子容器;XPDL不太容易,所以实现XPDL的工作流引擎一般比较庞大。
(8).对于使用者:SMWF结构性好,不易出错;XPDL由于过于灵活,容易使开发出错。
(9).灵活性:SMWF显然不如XPDL;但是SMWF应该能满足所有的规范的流程开发。

8. 单线程例子的SMWF图形实现:



Loop Container Example:


9. 单线程例子的XPDL图形实现:



10. 并发支持(多线程):
案例:两个线程分别对一副图像进行图像处理,然后将两个图像处理结果的内容叠加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值