和前面的章节一样,我们先从一个故事开始,这个故事和晚饭有关。在我家,周一至周五,老婆做饭,我洗碗。每天做完
饭,老婆会叫我到厨房,说,看,这个盘要洗一下,另外,灶台脏了,也要擦。如果放在以前,我会说,好,明白了。但是现在,程序员的生活让我意识到,沟通永
远不是一件简单的事情,我说,好,知道了。
等等,这个故事和本章的主题
-数
据模式有一毛钱的关系?这只是一个关于沟通的故事。是的,让我们稍微映射一下:这里,晚饭这个流程包含了两个基本的任务,分别是做饭和洗碗,在做饭这个任
务完成时,任务的执行者(老婆)向下一个任务的执行者(我)传递了数据(要洗哪些东西),正如语言是人之间的沟通方式一样,数据是
IT系统之间的沟通方式,语言之间的沟通总是最有效的,数据交互却未必,因为
IT系统里的数据交互除了让计算机理解外重要的是还需要人理解,
IT系统是对现实生活的映射,也正因为如此,现在数据之间的沟通也在向语言靠拢即语义化(
REST/语义网)。
好,言归正传。
在
前两章里,我们分别讨论了工作流的控制模式和资源模式,控制模式关注于如何合理调配业务流程里的任务,从而获得理想的执行效率和收益;资源模式则关注于如
何合理调配可用的资源来执行业务流程。本章将介绍工作流系统里的数据模式,从数据的角度分析工作流系统对数据的处理。数据模式共计
39种,在下面的介绍中,我们将这些模式分为了四部分,分别是数据可见性、数据交互、数据传输和基于数据的路由。
本章先会概要重复一下与数据模式相关的一些基本概念,例如流程定义、流程实例、原子任务、块任务等。接下来会对具体的
39种数据模式进行讨论,讨论的模式按照应用、描述和实现展开,分别对应着实际场景对模式的映射、模式的介绍和工作流系统对该模式的实现支持。最后是小结。
一、基本概念
1、工作流系统里的流程结构
在正式介绍数据模式之前,让我们先简单回顾一下工作流系统里流程的基本结构。
图
6-1 工作流系统里的流程结构
流程定义
:对业务流程的建模和描述,其具有足够的细节信息,能够直接被工作流系统所执行。典型的,流程定义由一系列的任务组成,这些任务以图形的形式展现并被连接起来。
流程实例
:流程定义的一个执行实例被称为流程实例。一个流程定义可以存在多个同时执行的流程实例。这些流程实例互相独立执行。
任务
:一个任务对应着流程定义里的一个单一工作单元。存在四种不同类型的任务:原子任务、块任务、多实例任务和多实例块任务。
原子任务包含简单且独立的任务定义,当其初始化时只会产生一个可执行的任务实例。
块任务是一系列任务的组合,典型的,工作流系统里存在的子流程任务(节点)即是块任务,当一个块任务开始执行时,其将流程控制权传递给与之对应子流程的第一个任务,当子流程完成执行后则将控制权返回给块任务。如图
6-1所示,块任务
C对应着一个由任务
X、任务
Y和任务
Z组成的子流程,实际执行时,任务
C会触发任务
X的执行,任务
Z执行完毕即子流程执行完成后则会触发任务
C执行完成。
多实例任务在实际执行时会产生多个并行执行的任务实例,这些任务实例一般互相独立执行。当一定数量的实例执行完毕后即会触发后续任务的执行。
多实例块任务结合了块任务和多实例任务的定义,其在实际执行时产生多个任务实例,每个任务实例对应着一个子流程实例。
任务实例
:任务的一个执行实例。
2、数据相关约定
我们使用
def var ${变量名
}定义数据元素,同时
def var
${变量名
}的声明位置决定了变量的作用范围。如图
6-1所示,我们在任务
C上定义了一个名为
M的数据变量,其的作用范围为任务
C,任务级别。
我们使用
use(${变量名
})表明对变量的使用;使用
pass(${变量名
})表明数据变量的传递。在图
6-1里,变量
M从任务
C传递至任务
E。
对于变量的数据类型,典型的有
String、
integer、
float、
boolean、
date、
time等,很多工作流系统使用序列化和反序列化支持存储任意类型的数据类型,如数组、集合、对象。
3、类比的约定
在后续对各个模式的介绍里,我会围绕一个项目团队的故事进行映射,我们如此约定:
流程定义:
我们认为所有成熟的软件公司都会建立起其完整并适用的一套软件开发流程,我们将这套流程看作是这里的流程定义。
流程实例:
围绕着软件开发流程,我们会使用这套流程来开始我们实际的软件开发项目,我们将所有的软件开发项目都看作是开发流程的执行实例,即流程实例。
任务:
项目开发过程中的各项任务。
数据:
我们将团队成员之间的信息交流看作是数据交互。
- 大小: 35.4 KB
分享到:
相关推荐
5. **流控制与拥塞控制**:流控制确保任何一端不会因发送数据过快而使对方无法处理,而拥塞控制则管理整个网络的数据传输量,防止网络核心发生拥堵。 ### 可靠数据传输的实现 6. **可靠数据传输**:互联网的面向...
5. 设计模式:求职者了解常用的设计模式,如单例模式、工厂模式等,这代表其有设计良好软件架构的能力,能够使用设计模式解决软件设计问题。 6. JVM与性能优化:求职者了解JVM(Java虚拟机),这是Java平台的核心...
"ShareMeal: 共享晚餐" 是一个项目名称,很可能是一个关于在线餐饮分享或预订的平台。这个项目可能使用了JavaScript作为主要的编程语言,并且数据存储方面选择了MongoDB,这是一个流行的NoSQL数据库系统,特别适合...
5. **流控制与拥塞控制**:流控制防止一方过快发送数据导致对方接收不过来,而拥塞控制则是为了防止大量数据涌入网络,导致核心路由器的缓冲区溢出。 6. **面向连接服务的可靠性**:TCP通过确认和重传机制保证数据...
- 适用于实时应用如语音通话、视频流等场景,对延迟敏感但能容忍部分数据丢失。 以上内容详细介绍了《计算机网络:自顶向下方法》第二版书中涉及的关键知识点,包括主机与终端系统的定义、网络通信的类比、客户端...
6. 无连接服务的原理特征:1 没有握手 2 没有可靠数据传送的保证 3 没有流控制或者拥塞控制 知识点:UDP 协议的基本特征 7. 流控制和拥塞控制的两个面向不同的对象的不同的控制机理。流控制保证连接的任何一方不会...
- **活动图简介**:活动图用于描述业务流程或工作流。 - **关键活动**: - 充值流程 - 消费流程 - 挂失与解挂流程 - **作用**:活动图有助于理解整个系统的业务流程,为系统设计提供参考。 #### 五、项目组成员...
养生餐饮作为一种关注健康、注重营养的餐饮模式,正在逐渐成为现代城市居民的新选择。尤其在北京这样的大城市,快节奏的生活导致许多人忽视了早餐的重要性,而早餐的质量直接影响到人们的身体健康和工作效率。调查...