写代码写得有点累了,今天写写文章。
在文档《9_fireflow技术原理》中,我将整个系统从工作流的视角划分为“业务子系统”和“工作流子系统”。用Activity刻画业务子系统的行为,用Synchronizer(包括StartNode和EndNode)刻画工作流子系统的行为,用Token和transition刻画控制权在业务子系统和流程子系统之间的转移和转移路径。
在工作流内部,按照元素的不同属性可以将元素分成两种类型。一种是映射到PetriNet的“工作流逻辑”元素,例如 Activity,StartNode, Synchronizer,EndNode,Transition;另一种是代“表业务逻辑”的元素,目前就是Task。WorkflowProcess是将二者组织在一起的最高层元素,既包含工作流逻辑元素,又包含业务逻辑元素。
在预览版本的文档中,各个元素的关系如下图1
图1:WorkflowProcess
后来在网友的反馈中提到“自行重组业务流程”的问题。如果用图1中的元素去实现业务流程重组是比较麻烦的,例如如下场景:某系统上线后,因业务需求变化,需要从流程中去掉一个环节,运行一段时间后,需求再次发生变化,需要将删除的环节恢复。删除一个环节当然非常简单,但是重新恢复一个环节,则有一点工作量,不但需要重新创建一个Activity,还要创建其中的Task,配置Performer、Form Url等等。
进一步思考,我认为图1中的Activity和Task的组合关系错误地反映了业务逻辑和工作流逻辑的关系。Task不应该是Activity的组成元素,而是WorkflowProcess的组成元素;Activity仅仅是Task运行的容器,即Activity和Task之间是一种聚合关系,如下图2。这种结构关系使得业务流程重组变得更加简单合理。例如:在上述业务流程重组的案例中,删除一个一个环节仅仅是删除Activity,而不是删除Task;恢复环节是创建一个新的Activity,然后把已经存在的Task“组装”到这个Activity即可。
图2:New WorkflowProcess
Fire workflow Engine由若干个服务组成,同理,这些服务也按照其职责的特性分成两类。一类服务完成业务相关的逻辑,另一类服务完成工作流流转逻辑。如下图3,红色部分属于工作流逻辑服务,蓝色部分属于业务逻辑服务。
图3:Engine
我们都认为工作流引擎的内核(Kernel)是整个引擎中最重要的部分。通过网友的反馈我发现这个说法现在要稍作修正,Kernel只是整个工作流引擎最重要的部分
之一。很多应用逻辑方面的特性如果从Kernel的角度来来解决,既复杂又不好用。例如:投票式的会签,会签并不要每个参与会签的Actor都完成其工单才能往下流转,只要超过一定百分比的人完成其工单就可以结束任务实例并且往下流转。再例如xman和snowfox2008提到的“并发子流程”(http://www.iteye.com/topic/322174?page=9)的问题。虽然这些问题不是常见的工作流模式,但是这些问题解决得好不好对真实的业务系统来说又是非常重要的。
在Fire Workflow 1.0的版本中,TaskInstanceManager被视为另一个最重要的服务。TaskInstanceManager除了增强其功能外,大大增强其扩展性,以解决五花八门的业务逻辑需求。TaskInstanceManager的主要作用是管理TaskInstance的生命周期。在新的设计中,TaskInstance生命周期分成3个阶段,create阶段,run阶段和complete阶段。在每个阶段,业务子系统都可以提供相应的插件来控制TaskInstance的运行,从而达到定制其行为特性的目的。
例如:在预览版本中,只能通过扩展AbstractTaskInstanceManager的public ITaskInstance createTaskInstance(IToken token, Task task, Activity activity)来产生MyBizTaskInstance。然而在很多业务系统中,每个流程都需要有自己的TaskInstance扩展,上述实现方法对这种需求支持的不是很到位。改进之后,每个流程都可以装配自己的TaskInstanceCreator,多个流程也可以共用相同的TaskInstanceCreator,甚至同一个流程的不同的Task都可以有自己私有的TaskInstanceCreator。这样就给业务系统提供了极大的方便性。
再例如:业务系统可以给特定的SubflowTask装配一个定制的TaskInstanceRunner,该runner可以为子流程创建多个子流程实例,这样就实现了“并发子流程”的需求。而Fire workflow提供的DefaultSubflowTaskInstanceRunner的默认行为是每个子流程仅创建一个子流程实例。
再例如:业务系统可以给特定的Task装配定制的TaskInstanceCompletionEvaluator,该扩展可以根据任意规则决定TaskInstance是否可以被终结。当然也能够满足“投票式会签”的需求。
上述设计变更是1.0中最重要的变化,代码还在编写中,设计思路还待进一步验证。

- 大小: 52.3 KB

- 大小: 44.4 KB

- 大小: 56.1 KB
分享到:
相关推荐
### FireWorkflow工作流模型 #### 当前工作流模型的缺点 文章首先指出了现有工作流模型存在的缺陷,如灵活性差、难以适应不断变化的业务需求、扩展性有限等问题,这成为FireWorkflow设计理念的重要背景。 #### ...
"Fire Workflow工作流开发程序包"是一个专门针对工作流管理系统的开发工具,旨在帮助程序员和系统架构师设计、实现和管理复杂的工作流程。这个程序包包含了一整套用于工作流开发的工具和资源,旨在提高工作效率,...
**FireWorkflow工作原理** FireWorkflow的核心是基于规则的工作流引擎,它负责解析和执行预定义的工作流模型。工作流模型通常由一系列活动(如任务、审批、通知等)和它们之间的流转规则构成。这些规则定义了工作流...
该系统的设计还参考了WfMC(Workflow Management Coalition)的工作流参考模型。这一模型详细描述了工作流系统中各个组件之间的交互关系及其与第三方程序的集成方式。具体来说: - **流程定义工具**:用于创建和...
- **流程引擎Workflow**:负责工作流的设计、执行与监控。 - **表单设计FormDesign**:提供可视化表单设计工具。 - **数据库工具DTS**:辅助数据库迁移和同步操作。 - **即时通讯MSQ**:集成即时通讯功能。 - **统一...
mxGraph是一款强大的JavaScript库,专用于在Web页面上创建流程图和工作流设计器。这款工具以其高度可定制性、灵活性和跨浏览器兼容性而受到广大开发者的青睐。它支持包括Internet Explorer和Firefox在内的多种主流...
**FIXES2007平台**是方正国际软件有限公司开发的一款企业级应用开发平台,它以计算机科学为基础,定位为国内领先的企业基础架构及软件中间件平台。该平台的目标在于通过工具化的方式简化企业信息系统的开发与部署...