• 工作流控制模式-状态模式5种


    版权声明:工作流模式版权归 Workflow Patterns 组 织 ( http://www.workflowpatterns.com ) 所 有 。 经 Workflow Patterns授权,中文简体版由辛鹏和荣浩翻译。未经译者书面许可,不得将该中文简体版用于商业目的。

    当前流程实例的状态会影响流程实例的后续执行。这里的状态包括了当前流程实例正在执行 的活动数量、内容、时间,正在执行活动的状态(挂起、超时)、与流程实例相关的数据以及当 前资源状态等。状态模式讨论当前流程实例状态对流程实例后续执行所产生的影响。
    状态模式共有5种,如图A-35所示。

    图A-35 状态模式

    1. 延迟选择:当需要在多个分支中选择一个分支实际执行时,这个决定被尽可能的延后,以获得最新最充分的信息。
    2. 交叉并行路由:一系列的活动需要执行,在同一时间,只允许一个活动被执行。这些活动之间部分存在顺序,剩余活动任意执行,它们的顺序在运行时决定。
    3. 里程碑:只有当流程实例处于某一特定状态(里程碑)时,特定活动才有可能被激活。流程实例的特定状态充当活动执行的前提条件。
    4. 关键区域:两个或多个由互相连接活动构成的区域被标识为关键区域。在同一时间,这些关键区域只有一个能够激活执行,标示对资源的独占使用。
    5. 交叉路由:一系列的活动需要执行,在同一时间,只允许一个活动被执行。与交叉并行路由模式的区别:活动之间完全不存在任何预定的顺序,任意执行,在运行时决定它们 的顺序。

    延迟选择(WCP_16: Deferred Choice)

    描述

    流程实例在某个点有多个分支可供选择,只能有一个分支被实际执行。

    延迟选择与XOR-split的区别是:选择并不是在后续分支被触发之前,相反,这个决定被尽可 能的延后,每个分支都有可能被执行,具体哪个分支被实际执行取决于具体的流程实例运行环境。

    如图A-36所示,某电商的货物自提流程,三个分支都被触发,一旦有一种分支情况发生,其 他的分支将被取消。选择被延迟到第一个分支开始实际执行之前。

    图A-36 延迟选择

    同义词

    隐式选择、延迟XOR-split。

    交叉并行路由(WCP_17: Interleaved Parallel Routing)

    描述

    一系列的活动需要执行,在同一时间,只允许一个活动被执行。与顺序模式不同,这些活动 之间可能部分存在顺序,剩余活动则任意执行,它们的顺序在运行时决定。所有活动都执行完毕 后触发后续活动的执行。
    如图A-37所示,去医院检查身体,需要做常规检查、抽血和吃早饭,抽血一定要在吃早饭之 前,其他项目则没有限制。那么可能的顺序有:常规检查->抽血->吃早饭(抽血处排队严重)、 抽血->吃早饭->常规检查和抽血->常规检查->吃早饭。

    图A-37 交叉并行路由

    里程碑(WCP_18: Milestone)

    描述

    只有当流程实例处于某一特定状态时,特定活动才有可能被激活。

    如图A-38所示,我们去在线旅游网站预订行程,只要没有打印最终的行程单,我们就可以修 改行程。这里我们使用事件网关做分支的延迟选择。

    图A-38 里程碑

    关键区域(WCP_39: Critical Section)

    描述

    两个或多个由互相连接活动构成的区域被标识为关键区域。在流程实例执行的任何时刻,这 些关键区域只有一个能够激活执行,不能同时执行。保证活动对某资源的独占式使用,该资源是 物理资源、人力资源也可以是业务系统。

    如图A-39所示,修改产品环境的流程,在任何时刻,都只能有一个系统管理员对环境进行修 改。这里我们使用事件网关做分支的延迟选择。

    图A-39 关键区域

    交叉路由(WCP_40: Interleaved Routing)

    描述

    一系列的活动需要执行,在同一时间,只允许一个活动被执行。交叉路由与交叉并行路由模 式的区别是:活动之间完全不存在任何预定的顺序,可以任意执行,在运行时决定它们的顺序。 所有活动都执行完毕后触发后续活动的执行。

    如图A-40所示,体检流程,我们根据自己的情况选择检查项目的顺序,当所有项目都检查完 毕后体检就结束了。

    图A-40 交叉路由

    本文来源:http://www.cnblogs.com/x3d/,转载请注明。
  • 相关阅读:
    Python 冒泡排序
    编程规范之注释篇
    编程规范之变量命名篇
    安装Django
    字典&列表的拓展理解
    小球落地
    Python结合sql登陆案例
    面向对象:两手交换牌
    每日一题(一)
    Web应用之LAMP源码环境部署
  • 原文地址:https://www.cnblogs.com/x3d/p/15376677.html
Copyright © 2020-2023  润新知