再谈调用子流程(1)

 [调用子流程]一文中,我举了一个InvokeWorkflowActivity调用子流程的例子,其实在这个例子中主要演示了如何将流程的业务逻辑封装到自定义引擎中。如果单从实现目的来说,这个例子远不如将子流程的业务封装到一个自定义的Activity中好。
子流程很好用,InvokeWorkflowActivity也很好用,InvokeWorkflowActivity不是傻小子,它必需是异步的,如果要是同步的,我真的要骂它了。
InvokeWorkflowActivity异步调用子流程,用HandleExternalEventActivity实现子流程的回调。看一下业务场景吧:

 这是以前为北京某个电子政务系统设计的方案(本例中只引用了流程部份)


 

在这里,我们先看一下,[工商局系统]中的[发放营业执照流程]

我们都知道要成立一个进行商事活的团体,要经工商部门批准,并颁发营业执照。

这里以成立公司为例,其标准流程如下(具体见电子政务_标准流程)


 

这是一个向工商局申请成立公司的标准流程,但这只是一个大框,用面向对象的说法,这只是一个抽向类,只能作为一组实体类的接口,下面我们来实现这个抽向流程

由于不同类型的公司(个人公司、有限责任公司、股份有限责任公司)在接受申请、受理、审查、决定环节都有本质的不同,有些公司区级工商部门就可以批,有些要省级批,有些要报国务院备案

所以我们要分别建立具体的工作流模板,以50万元以下有限责任公司为例



 

以上的申请、受理、决定的具体流程在这里就不说明了,感兴趣的可以看一下[行政许可法][公司法],所有这种规模的公司流程是完全一样的

这里说一下(审查)结点,由于公司的经营项目不同,要审查的具体内容也不同,而且进行审查的部门也不同,比如,要成立一个网吧,要有消防、文化、公安等部们开具的许可证,要开饭店要有卫生部门开具的许可证。工商部门只看申请专利是否有所需的许可证,并与发证部门进行核查,而各类具体许可证的发放过程,工商部门不关心。

流程设计如下:


 

现在谈一下划分业务粒度问题

 

1.在具体的[申请成立50万元以下有限责任公司流程]中还有动态分支,那为何不直接在[标准流程]所现所有的业务分支,首先实现所有的分支,100年也作不完(经济法、商法、行政法、各类相关的法律法规,光目录一辈子都看不完,而且随时还有新法产生,旧法废除),其次,区级工商部门不能受理股分有限公司的成立申请,省级工商部门也不能受理人个公司的成立申请。所以系统不需大全。

 

2.即然业务已经分层,为何不为[网吧、饭店、书店等]成立各自建立一个独立的流程,这样作的也有,我也看过,不过这种方式略懂公司法的人就会提出很多弊端,如网吧想兼营卖书或卖游戏点卡业务该怎么办,当然这种设计可以用一个辅助的添加经营项目流程来实现,所以具体需求具体分析吧。

 

下面谈一下[审查网吧流程,审查饭店流程,审查书店流程]的存在方式,我不建议用子流程,而是应将其封装成[自定义的Activity],子流程应该具有如下特点:

1.子流程是一个独立、完整的业务流程

2.子流程在设计时不知、也不业考虑主流程

3.主流程在没有子流程的情况下,从业务逻辑到代码逻辑都是完整的

4.主流程与子流程在业务逻辑上也是松散藕合的

 

在下一篇中,我将就本文的场景具体介绍子流程的应用.



posted @ 2006-10-26 14:42  WXWinter(冬)  阅读(1886)  评论(4编辑  收藏  举报