2.复杂的网关
复杂网关是一个不同的类别。虽然它不常被使用,但在某些情况下它的使用是合理的。例如:我们想要订披萨。我们仔细阅读我们最喜欢的供应商的菜单。在研究了两种来源之后,一旦我们找到了想要的东西,就会开始。
我们如何建立模型呢?图2.1展示只有对两个源对比研究之后才订购比萨饼。
图2.1披萨研究与合并。
在图2.2中,两者都不是选项:基于令牌概念,我们将执行两次订披萨的任务。
图2.2:使用xor合并的披萨研究。
图2.3中的or合并也没有解决这个问题:当一个令牌到达or合并时,流程会等待可能永远不会到达相应的令牌那里。or合并行为因此与and网关相同。
图2.3:披萨研究与或合并。
解决方案是结合注释的复杂网关,如图2.4所示。一旦其中一个任务完成,复杂的合并就会将令牌发送披萨订单的任务。当下一个令牌到达复杂合并时,它被消耗。它就消失了。
图2.4:具有复杂合并的披萨研究。
下面是类似的情况:假设我们一次执行四个任务。第5个任务将在前四个任务中的3个完成后执行。例如,我们问四个朋友他们想在哪家披萨店点餐。一旦三位朋友提出了意见,我们就会做出决定。我们可以用一个复杂的网关来建模我们的同步行为。(参见图2.5。)
图2.5:使用复杂网关实现n个合并中的m个。
原则上,一个复杂的网关也可以作为分割来应用,例如,将几个不同的网关汇总在一个符号中,以节省一些空间。通过在注释中编写分割语义,可以用一个复杂的网关替换分离出来的or。但这并没有真正意义,而且我们从来没有将复杂网关用作分割,也没有在任何实际模型中看到过它的使用。
本文会持续更新,欢迎关注,技术支持:盘古BPM