大家都知道,在WF中默认情况下,其活动是以树状结构组成的,简单说就是复合活动包含其子活动,如果子活动也是复合活动也可以包含其子活动,但同一个活动不能成为两个活动的子活动。这种方式被大量使用在WF自带的活动库中,比如:循环,条件活动等等。
这种方式的缺陷有以下几点:
1、传统的流程结构方式都是线性的,这种树状的可能会使流程设计人员反感;
2、如果树的层次太多,会使流程难以理解。
由此,是不是可以既不和WF内在树状结构冲突,又能在形式上以线性的方式表达流程结构呢?
我的想法是:
1、构建流程对象,把它作为根活动(复合活动),其他元素都以其子活动存在;
2、构建流(线)对象,它不是活动(Acticity)的子类,它指明了源活动和目的活动,同时也保存在流程对象中;
3、WF从根活动开始执行,这里就是流程对象,由它根据线的流向决定下一个执行的活动,但是它不负责诸如循环,条件这样的结构;
4、构建循环,条件等活动(非复合)并由其根据线的流向决定下一个执行的活动。
这种方式也不是完美的,其缺点如下:
1、需要自己来构建循环、条件等流程结构,基本不能复用WF所提供的;
2、当涉及取消、补偿、异常处理时,不仅需要自己来处理其跳转流程,而且还需要构建管理分支活动的行为(考虑分支比较复杂的情况)。
当然,这两种方式都是可行的构建方案,具体选择还要看各自应用场景的不同以及项目本身的预算等条件的不同。
PS:这里讨论的不涉及状态机的方式。
【讨论】基于WF的流程结构
转载于:https://www.cnblogs.com/bobmazelin/archive/2008/03/19/1112938.html
相关文章:

(C++)设计一个程序能计算一个日期加上若干天后是什么日期and计算日期差值
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。 输出m行,每行按yyyy-mm-dd的个数输出。 #include<cstdio>//判断是否是闰年 bool isLeap(int year){return (year%40&&year%100!0)||year%4000; }//用二维数…

【转载】解决Apache2+PHP上传文件大小限制的问题
原文出处:http://evol1216.blog.163.com/blog/static/13019958020106783623528/ 在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下: 1、php.ini:uploa…

第36章 网络管理
第36章 网络管理 监听 11g的话首先写配置文件vi /u01/grid/11g/network/admin/listener.ora打开后选取下面的两个部分修改就好了 模板所在地vi /u01/11g/network/admin/samples/listener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DNAMEwyzc11g) (SID_NAMEwyzc11g)…

(C++)CSP202006-2 稀疏向量 two pointers
#include<cstdio>const int M 500000;//a,b<5*10^5 int u[M1][2];//第一维是index,第二维是value int v[M1][2];int main(){//1.读入n,a,b//2.对数组进行遍历,如果第一位相等,将第二维相乘 int n,a,b,i;long long ans0;scanf("%d%d%d&qu…

基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库01 —— 准备环境,搭建本地仓库,安装ambari...
一、集群软硬件环境准备: 操作系统: centos 7 x86_64.1804 Ambari版本:2.7.0 HDP版本:3.0.0 HAWQ版本:2.3.05台PC作为工作站: ep-bd01ep-bd02ep-bd03ep-bd04ep-bd05其中ep-bd01作为主节点,用于…

PDF编辑工具——PDF Desktop Converter 4 Professional
管理和操作PDF的工具。PDF Desktop Converter 4 Professional可以生成,转换,提取,组合,分割合并PDF。新增加的OCR功能可以将扫描后的文件转变成可以检索和编辑的PDF。以上这些功能只需要一个软件就可以全部实现。软件特点1. 快速&…

史上世界上最惨烈的几次股灾!
史上世界上最惨烈的几次股灾!●最惨烈的几次股灾 1美国股灾 1.1 1929年大股灾 1929年10月24日,星 期四。灾难的发生是毫无征兆的,开盘时,并没有出现什么值得注意的迹象,而且有一段时间股指还非常坚挺,但交易…

(C++) CSP 201803-1 跳一跳
#include<cstdio> const int M 30; int a[M1][2];//第一维用于读入,第二维用于记录上一局得分 int main(){int temp,index0,ans0;scanf("%d",&temp);while(temp!0){a[index][0]temp;if(a[index][0]1){ans1;}else{if(a[index-1][0]2){a[index][…

C#对象数组排序方法
一个排序的类,用了几种方式实现的。 usingSystem; namespaceDataStruct { publicclassSorter { ///<summary>///冒泡排序法1 ///</summary>/*(1)对于数组list中的1至n个数据,先将第1个和第2个数据进行比…

Asp.net MVC 3 防止 Cross-Site Request Forgery (CSRF)原理及扩展 安全 注入
原理:http://blog.csdn.net/cpytiger/article/details/8781457 原文地址:http://www.cnblogs.com/wintersun/archive/2011/12/09/2282675.html Cross-Site Request Forgery (CSRF) 是我们Web站点中常见的安全隐患。 下面我们在Asp.net MVC3 来演示一下。…

Windows下安装Redis服务
2019独角兽企业重金招聘Python工程师标准>>> Redis是有名的NoSql数据库,一般Linux都会默认支持。但在Windows环境中,可能需要手动安装设置才能有效使用。这里就简单介绍一下Windows下Redis服务的安装方法,希望能够帮到你。 1、要安…

(C++)1022 D进制的A+B 除基取余法将10进制数换成给定进制数
#include<cstdio> //除基取余法 const int M 30;int main(){long long a,b,c;int D,ans[M2];scanf("%lld%lld%d",&a,&b,&D);cab;int num0;do{ans[num]c%D;c c/D;}while(c!0);for(int inum-1;i>0;i--){printf("%d",ans[i]);}return…

Linux zip-tar.gz 压缩解压
tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。zip 压缩方法: 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归zip [参数] [打包后的文件名]…

Spring(ApplicationContextBeanFactory)
BeanFactory 才是 Spring 容器中的顶层接口。ApplicationContext 是它的子接口。 BeanFactory 和 ApplicationContext 的区别:创建对象的时间点不一样。 BeanFactory接口 spring的原始接口,针对原始接口的实现类功能较为单一.BeanFactory接口实现类的容器,特点是每次…

spoolsv.exe占CPU100% 的解决方法
spoolsv.exe占CPU100% 的解决方法spoolsv.exe是打印缓冲,没有打印机就关掉,有的话在打印时会占用很大内存。因为要打印的文件要转化格式。禁止Print spooler服务,如果用打印机,此方法不可行。 解决办法如下:1、在服…

(C++)1037 在霍格沃茨找零钱的两种解法
解法一 #include<cstdio> //十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可 //1 G 17 S , 1 S 29 Kint main(){int g1,s1,k1,g2,s2,k2,g3,s3,k3;scanf("%d.%d.%d",&g2,&s2,&k2);//定价 scanf("%d.%d.%…

开发人员角色分析
开发人员角色分析: 开发人员Developers 主要包含以下角色: n 软件架构师Software Architect n 设计员Designer n 用户界面设计员User-Interface Designer n 数据库设计员 Database Designer n 实施员Implementer n …

php empty()和isset()的区别
在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。 顾名思义,empty…

jmap 内存情况
2019独角兽企业重金招聘Python工程师标准>>> -dump dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名 [rootlocalhost ~]# jmap -dump:live,formatb,filedump.hprof 187784 Dumping heap to /home/yxgly/dump.hprof ... Heap dump …

(C++)1021 个位数统计
#include<cstdio> #include<cstring>const int M 1000;int main(){char str[M1];int count[10]{0};//全部初始化为0 scanf("%s",str);int len strlen(str);int i;for(i0;i<len;i){count[str[i]-0];}for(i0;i<10;i){if(count[i]>0){printf(&qu…

TOJ--3456--数学题
这题 做出来真的好爽啊... it is cool although it is easy 虽然 已经是大概1 2点的事了 我拖到现在才写是因为------lol 终于赢一把了 --- 先贴下题目: touch me 嗯 我一开始 用的是 3重for 我以为32767的数据量 是很小的.... 结果 TLE。。 OK 那么 我们只能换…

firewalled centos7
zone绑定网卡 firewall-cmd --zoneinternal --add-interfaceens192 --permanent firewall-cmd --permanent --zoneinternal --add-rich-rule"rule family"ipv4" source address"192.168.10.0/24" accept" [rootbyos000 system]# firewall-cmd -…

为Delphi程序添加事件和事件处理器
在Delphi中,事件实际上是专门化的属性,它是一个过程(procedure)的指针。要添加事件,首先应在所定义的类中说明一个用来指向事件过 程的指针,该指针的作用是当事件一旦发生,就通过这个指针执行所…

(C++)1031 查验身份证 3难点+3注意点
#include<cstdio> #include<cstring> //难点1:检查前17位是否全为数字 //解决之道1:本来就不是整型数字,是字符数字,判断是否在0和9之间即可 //难点2:遇到一个X后,如果不想处理sum了该怎么办 /…

Perl时间处理函数
官方网址:http://search.cpan.org/~stbey/Date-Calc-6.3/lib/Date/Calc.pod#___top use Date::Calc qw(Days_in_YearDays_in_MonthWeeks_in_Yearleap_yearcheck_datecheck_timecheck_business_dateDay_of_YearDate_to_DaysDay_of_WeekWeek_NumberWeek_of_YearMonda…

Linux环境搭建 | 手把手教你安装Linux虚拟机
2019独角兽企业重金招聘Python工程师标准>>> 前言 作为一名Linux工程师,不管是运维、应用、驱动方向,在工作中肯定会需要Linux环境。想要获得Linux环境,一个办法就是将电脑系统直接换成Linux系统,但我们平常用惯了Wind…

企业的覆灭,我监视你的Exchange邮件!
现在很多企业都搭建ExchangeServer平台,一个用户包括Domain admins都是不允许查阅其他用户的邮件信息的!殊不知作为Domain Admins权限用户可以经过精心的设置,可以达到浏览到其他用户邮件信息! 转载于:https://www.cnblogs.com/al…

(C++)1002 写出这个数
#include<cstdio> #include<cstring>const int M 100; //用字符数组装输入 //定义变量,输出字符数组的长度 //对字符数组遍历求和 //对结果逐位输出汉语拼音 void hanzi(int i){switch(i){case 0:printf("ling");break;case 1:printf("…

IO复用之epoll系列
epoll是什么? epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它…
MVP Summit 2008 照片纪实(二)- 旧金山,Google总部和Stanford大学
坐在洛杉矶机场里,终于为这次MVP峰会的美国之行画上了句号。从旧金山到拉斯维加斯,从拉斯维加斯到大峡谷,最后从大峡谷返回洛杉矶,3天之中总共驾驶历程超过1600英里(据说可以赶上出租车司机了)。3天之中经历…