工作流的模式

摘要:
对于此类业务需求,可以使用状态机模式。流模式的执行不是完全连续的。最好选择状态机模式,因为流模式本质上对工作流的路径进行建模,并将路径信息编码到模型中。例如,休假工作流中有两种参与:申请人和审批人在申请人眼中,他参与的工作流在审批人眼中是[流程模式],而他参与的工作流程是[状态机模式]。这些是我开发各种工作流的经验。
流模式(Sequential)
1.适合一个比效机械化的流程
2.在这种流程中,参与者处于一种被动的局面,他必须沿设定的路线一步一步完成。
例1:在MIS系统中,一个操作机器的工作流:
(开使->关1闸 –> 关2闸 -> 修理 -> 开2闸-> 开1闸 -> 结束)
在这个工作流中,需要严格按流程操作。而且在[修理]结点处可能还要调用一个修理某类设备的工作流。

例2:比如一个购物的工作流:
(开使->浏览->选择->缴费->取货 -> 结束)
在该例中,流程序顺的严格性就显得不是很重要,比如[缴费]与[取货]结点谁先谁后就不是很重要,只要[缴费]与[取货]都完成了就可以结正常[结束]该流程。
对于像这样的业务需求,就可以使用状态机模式

流模式的执行并非完全是顺序的。它们仍然可以接收外部事件或者启动并行任务,在这种情况下,可能会有状态机模式的表现形式。但就其设计与维护方式来说仍是 流模式

状态机模式(State Machine )
在状态机模式下,参与者的自主性比效大,工作流更多的是一个提醒的作用
例:一个审批流程:有六个部门批准才能通过,这六个部门的审批行为是独立进行的,不受其他部门结果的影响,可以使用状态机模式,配合规则实现
A.六个部门审批行为是并行模式
B.规则可以使用:全票通过,一票通过,简单多数,绝对多数,额定通过,等
另外状态可以由一种进入到另一种,如上例出现平票状态后,将进入联合听证流程

如何选择工作流模式
一个简单的判断标准
影响工作流程的一些重要的选择是否发生在工作流外部?是否由用户进行控制?
如果是,那就不适合采用流模式。而最好选用状态机模式

因为流模式本质上是对工作流的路径建模,将路径信息都编码到了模型之中。但是在某些时候,业务并不关心路径,而只关心结果,并且不关心结果是如何实现的。
这时要用流模式,就需要画出许多复杂的路径流程,但是这些复杂的路径却并非我们所关注的问题。而最后往往是维护路径的付出远远大于维护业务模块。

实际设计中的模式:
在实际设计中,模式的应用并不是泾渭分明的。同一工作流,在不同参与者的眼中就有不同的模式。
如一个请假的工作流,参与都有两种:申请人、审批人
在申请人眼里,他所参与的工作流是[流模式]
在审批人眼里,他所参与的工作流是[状态机模式]

以上是本人在开发各类工作流中的一些心得。在WWF中可能也会有一定的适用性

免责声明:文章转载自《工作流的模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]JAVA URL请求SQL Server 2008 删除大量数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

P4: Programming Protocol-Independent Packet Processors

P4: Programming Protocol-Independent Packet Processors 摘要 P4是一门高级语言,用于编程与协议无关的数据包处理器。P4与SDN控制协议相关联,类似与OpenFlow。当前,OpenFlow明确指定了运行的协议头。这个设置在几年内,从12个字段增长到41个字段,并且增加了协议头的复杂性,却没有提供应有的...

一个被遗忘的ccflow工作流引擎自定义表单开发模式

定义概述:一个已经做好的表单需要绑定到节点上 , 该文章在驰骋工作流引擎流程引擎设计器中。 自定义表单工作模式:流程控制按钮区域是ccflow来完成,表单区域是放在控制区域下面的框架里,如下图所示。 注意:蓝色边框一下是一个框架,框架里面的界面是一个url,这个就是自定义表单。 应用背景:这种类型是解决我自己已经有了一个成熟稳定的产品或者项目,里面的...

WF Workflow 状态机工作流 开发

概述 工作流是对业务流程的建模,当我们设计工作流的时候,我们首先要分析业务处理过程中要经历的步骤。然后,我们就可以利用WF创建工作流模型来模拟业务的处理过程。 我们知道,WF包含两种类型的工作流:顺序工作流和状态机工作流。顺序工作流提供了一系列有组织的步骤,一般情况下,步骤是逐一执行的。可能有的步骤需要等待某些事件的发生才可以继续执行,但通常情况下顺序工作...

Azkaban简介和使用

概述 为什么需要工作流调度系统 l 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序、hive脚本等 l 各任务单元之间存在时间先后及前后依赖关系 l 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行; 例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天...

关于驰骋工作流引擎ccbpm 在工业自动化环境下的 应用演示实例

关于工业自动化(引用百度百科) 定义: 工业自动化就是工业生产中的各种参数为控制目的,实现各种过程控制,在整个工业生产中,尽量减少人力的操作,而能充分利用动物以外的能源与各种资讯来进行生产工作,即称为工业自动化生产,而使工业能进行自动生产之过程称为工业自动化。 定义概述: 工业自动化是机器设备或生产过程在不需要人工直接干预的情况下,按预期的目标实现测量、操...

GIT团队合作探讨之二--Pull Request

pull request是github/bitbucket给开发人员实现便利合作提供的一个feature。他们提供一个用户友好的web界面在进代码之前来讨论这些变更。 简单说,pull request是一种为了开发人员通知team member他们已经完成了一个feature的机制。一旦他们的feature branch ready了,开发人员就通过他们...