Architect Inside 5-浅谈工作流

以架构师的眼睛看世界之五-浅谈工作流

 张大磊

    很多人了解计算机程序设计是从学习流程图开始的,那些菱形矩形的简单图表往往能让流程逻辑一目了然。但流程图不是可以运行的软件,充其量只是一种文档,所以入门后大家往往将流程图抛诸脑后直接分析设计上手写代码。但流程图就真的只能作为文档吗?在很多方面代码比不上流程图:

1.一个程序员写的程序另一个人需要花很长时间看懂其中的逻辑,不像流程图一目了然

2.在运行时看不到代码的运行状况,不知道运行到了哪个阶段,这对大型项目管理带来障碍。

3.代码总是被封装在对象或过程里,对象(过程)之间需要额外的逻辑才能共享状态。

    尽管一直不是软件开发的主流,但将流程图用在运行时总是一个不错的想法,尤其在文档生命周期管理、内部应用程序逻辑流转、BPMPageflow等场景下优势尤为明显:流程图在设计时高度灵活简便、运行时高度可见、管理更加方便。根据软件界水涨船高者生存的规则,以后很多公司为了提高自己的效率会不断接受引入工作流引擎到自己的产品中以避免重复发明劣质的轮子,面临的首要任务就是挑选合适的工作流引擎。那什么是理想中的工作流引擎呢?有人总结过工作流应该具备的一些支持模式,参见Workflow Pattern

http://en.wikipedia.org/wiki/Workflow_patterns

http://www.workflowpatterns.com/

    这些都是很有益的总结,但由于有些厂商商业利益夹杂其中,所以硬扯了一些Process Model的东西。也有很多人和我当年一样,参照openwfc,bpel4ws或者其他一些需要实现的功能点写过自己单位用的工作流引擎并冠以自主知识产权之名,但实际上离真正的工作流还有一段距离。简而言之,一个相对完整的工作流平台必须具备的功能如下:

1.能够完成流程跳转。

2.宿主进程、宿主、运行时、工作流引擎等各层解耦完全

3.宿主进程多样化,至少要可以栖身与主流应用服务器上,避免使用者在非必要情况下自写应用服务器。

4.宿主层包含持久化、定时器、跟踪、事务支持等运行时服务。

5.运行时层工作流执行必须的编排器、规则引擎、跟踪基础框架与工作流生命周期管理必须的状态管理、激活、冬眠等解耦。

6.工作流引擎支持包含常用的时序、状态等模型

    一个理想的工作流引擎除此之外还需要具备的功能如下:

1.宿主层支持与外界交互、多线程多进程支持等运行时服务,支持自定义运行时服务以便扩展。

2.工作流引擎支持的时序、状态等模型良好封装便于调用;引擎支持基于策略/规则的模型,支持自定义活动,为基于其上开发行业组件包的合作伙伴留出一条活路。

3.API良好组织调用简单,最好支持多语言多脚本。不要有稀奇古怪的流程定义语言,最好是业界已有的或者大家能很快接受的。

4.在设计时和运行时都有很多的辅助工具与注入代码的地方。

5.在设计时与运行时都有人性化的开发、调试、测试模板视图与设计器。

6.对常见中间格式如Plain Text,XML,Office Doc等有良好支持;对常见数据库、常见工业交换标准有所支持或有扩展支持的接口。

    除此之外,还有好多功能其实不属于工作流重点关心的,但由于技术决策者需要所以理想的工作流引擎也必须考虑的:

1.边界清晰、服务自治、共享schema与策略而不是类、基于策略的服务兼容。明眼人可能一看就要拍桌子了,这不是WCF等分布式应用服务的设计原则吗,怎么扣到工作流头上来了?原因很简单,因为便于发布成服务的工作流才是可塑性最强的工作流,所以工作流在屋檐下,不得不低头,这也是微软为什么Silver(.NET3.5中将WF发布成WCF)的原因。

      2.支持长事务,支持人-人、人-系统、系统-人、系统-系统等四种方式的流程协作,支持全生命周期的动态透明管理,模型高度可扩展。

3.可在不同工作流进程/线程间方便地转移操作状态和数据,方便地进行补偿冲帐等操作。 

基于以上考虑,大家可以看到微软的Windows Workflow Foundation已经完全可用了,当然还不是最理想的。有一个需要注意的是,笔者估计以后微软的工作流引擎会遇到一个发展怪圈,目前的WF虽然成熟程度已经比大多数国内公司做的自己的工作流引擎好多了,但还是抽象层级不高,虽然现在有Enterprise library在做的Pageflow,上文提到的Sliver等修修补补的工作,仍然难以挑起一统天下的重任。更大的原因是再往上做可能会碰到BizTalk ServerBizTalk Service的地盘(再次澄清一下后二者都不是工作流引擎)。只能寄希望于在Oslo中的表现了。

 总体来说,基于流程开发将在近年对软件开发产生深远影响。大家可以现在开始按照以上标准选择自己心仪的工作流并应用到日常工作中。 


重要申明:以上纯属个人观点,不代表任何公司意见,转载务请注明出处。
          本文部分借鉴Paul Andrew,James Conard的见解,在此致以感谢!

posted on 2008-01-28 12:12 Ray Zhang 阅读(3311) 评论(25)  编辑 收藏 所属分类: 技术感悟

评论

#1楼  2008-01-28 13:06 自由、创新、研究、探索……      

不错的一篇短文   回复  引用  查看    

#2楼  2008-01-28 13:08 liangzhen [未注册用户]

WF有一个设计上缺陷 在实际项目中是很难解决的

整个Workflow在设计时是XOML没有问题
但是在Runtime时候就是是二进制形式存储和操作的,这样没有办法外界去修改运行时的操作.
例如下面场景:
WF没有办法实现A-->B-->C--D 当前已经到C回退到B的操作。
WF没有办法实现A-->B-->C--D 中中途添加A-->B-->C--D-->E-->F...   回复  引用    

#3楼  2008-01-28 13:35 BenSoftcn [未注册用户]

@liangzhen
自己回去再好好看看WF吧。   回复  引用    

#4楼  2008-01-28 13:35 A.Z      

m$的wf最多也就围绕m$的产品的应用,上面有bz,m$会用一个开放性的充分实现的架构自残吗?   回复  引用  查看    

#5楼  2008-01-28 13:42 Dflying Chen      

感觉很玄妙的东西,呵呵   回复  引用  查看    

#6楼  2008-01-28 13:42 张大磊(Ray Zhang) [未注册用户]

@liangzhen
WF没有办法实现A-->B-->C--D 中中途添加A-->B-->C--D-->E-->F...
============================


不知道你说的是哪种场景,WF中可以动态更新的。   回复  引用    

#7楼  2008-01-28 13:44 张大磊(Ray Zhang) [未注册用户]

@Dflying Chen
系统组件中往往概念越多越复杂的东西入门以后越简单:)
  回复  引用    

#8楼  2008-01-28 14:58 Anonymous [未注册用户]

怎么一下子跳到5了?   回复  引用    

#9楼  2008-01-28 15:18 Dflying Chen      

--引用--------------------------------------------------
张大磊(Ray Zhang): @Dflying Chen
系统组件中往往概念越多越复杂的东西入门以后越简单:)

--------------------------------------------------------
虽然入门之后可能越简单,不过带来的问题就是想深入、想自定义就越发复杂——你不知道系统怎么做的,甚至不知道为你做了什么。

比如前一段时间做的SQL Server BI,看起来似乎很容易,拖来几个框框,用线条连接起来程序就好了,不过想定制、想调试的时候却非常难。往往对话框一个套一个,出来了10来个才找到要设置的某个属性。当时我就想,要是直接写代码的话早就搞定了……

扯远了……嗬嗬   回复  引用  查看    

#10楼 [楼主] 2008-01-28 15:37 Ray Zhang      

@Dflying Chen
SQL不是系统组件。
SQL BI的复杂度比工作流引擎的复杂度要高。   回复  引用  查看    

#11楼  2008-01-28 15:48 Dflying Chen      

--引用--------------------------------------------------
Ray Zhang: @Dflying Chen
SQL不是系统组件。
SQL BI的复杂度比工作流引擎的复杂度要高。
--------------------------------------------------------
工作流想必需要定制的东西更多吧?我没用过,猜测的

不过SQL BI真是太不爽了   回复  引用  查看    

#12楼 [楼主] 2008-01-28 16:06 Ray Zhang      

@Dflying Chen
SQL在2005出来之前顶多算个Database,BI的功能很弱,仅有OLAP等;由于在2005开始转型,所以在BI方面还有很多待改进的地方。
其实整个行业的BI都还不象工作流那么成熟,所以开放程度和可定制性较低,如果你用过其他BI产品,就会发现SQL BI在易用性上还是可以的。
8年前我还不在微软,用其他一个某知名BI厂商的产品做DSS,那才叫一个惨...
每个操作点一下都得等,而且同一个脚本运行完居然有时候结果不一样...   回复  引用  查看    

#13楼  2008-01-28 17:04 Tom.Lee [未注册用户]

--引用--------------------------------------------------
Ray Zhang: @Dflying Chen
SQL在2005出来之前顶多算个Database,BI的功能很弱,仅有OLAP等;由于在2005开始转型,所以在BI方面还有很多待改进的地方。
其实整个行业的BI都还不象工作流那么成熟,所以开放程度和可定制性较低,如果你用过其他BI产品,就会发现SQL BI在易用性上还是可以的。
8年前我还不在微软,用其他一个某知名BI厂商的产品做DSS,那才叫一个惨...
每个操作点一下都得等,而且同一个脚本运行完居然有时候结果不一样...
--------------------------------------------------------
结果不一样就有点太。。。
  回复  引用    

#14楼  2008-01-28 17:52 Dflying Chen      

@Ray Zhang
恩,长见识了,还需要多学习一下阿   回复  引用  查看    

#15楼  2008-01-29 01:29 长见识了,还需要多学习一下阿 [未注册用户]

确实要学习了   回复  引用    

#16楼  2008-01-29 06:20 ayine [未注册用户]

我研究WF也很久了,但总是有些莫名其妙的问题会出现,如之前运行得很好的流程,在一些特这\ad   回复  引用    

#17楼  2008-01-29 06:22 ayine [未注册用户]

我研究WF也很久了,但总是有些莫名其妙的问题会出现,如之前运行得很好的流程,在一些特定的点会定很久或直接出问题,导致我从商业项目中把WF去掉,使用了其它的工作流引擎。不过相信WF会做得更好的   回复  引用    

#18楼  2008-01-29 09:14 atu [未注册用户]

其实,还有重要的部分: 自定义数据的组织与解析,数据的展现方式...   回复  引用    

#19楼  2008-01-29 10:21 破曉之陽      

不懂。。路过。   回复  引用  查看    

#20楼  2008-01-29 14:27 .Live      

哥们,234呢?   回复  引用  查看    

#21楼  2008-01-30 09:32 张大磊(Ray Zhang) [未注册用户]

@.Live
234早写完了,但其中有些可能会涉及NDA的地方,我会自己审查一遍再贴上来。   回复  引用    

#22楼  2008-01-30 12:17 lodestar      

@liangzhen
wf的版本控制还是可以的,对于下面几个需求:1、运行时动态改变,2、规则变化(ruleset或者RuleCondition变化),3、用新的xoml改变现有工作流文档。这些都是可以实现的。虽然按照wfmc的标准wf还不完善,但是完全可用的。   回复  引用  查看    

#23楼  2008-01-30 17:44 .Live      

@张大磊(Ray Zhang)
哦...表示理解,兄弟继续^_^   回复  引用  查看    

#24楼  2008-02-05 21:43 fox23      

--引用--------------------------------------------------
张大磊(Ray Zhang): @Dflying Chen
系统组件中往往概念越多越复杂的东西入门以后越简单:)

--------------------------------------------------------

说的对~

:)
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-01-31 11:35 编辑过


相关链接:
 

导航

公告



真实姓名:张大磊(Ray Zhang)

言论仅为个人当前时间之观点
转载敬请联系作者并注明出处

统计

与我联系

搜索

 

常用链接

留言簿(31)

随笔分类(24)

随笔档案(57)

文章档案(7)

新闻档案(2)

相册

Healthcare

MAC

Private

现实中的朋友

最新随笔

最新评论

  • 1. re: WCSF Webcast相关文件下载
  • 请问张老师: 1. wcsf中注册AddGlobalServices全局服务后,A模块调用B模块的函数,应该在那里调用啊,页面view层吗? 2.模块之间的交互涉及的 事物怎么解决啊?...
  • --liuzhixin
  • 2. re: TechED VS2008课件
  • 大哥,不能下载,可以把 VS2008幻灯片发到我的邮箱吗?
  • --suyue