[转]关于工作流,从“Hello World”谈起...

来源:互联网 发布:mac ins视频下载 编辑:程序博客网 时间:2024/05/05 09:31

我们学习C,C++,java这类语言时,第一个入门程序一般都是“Hello World”。
这个经典的“Hello World”程序虽然简单,但也一样能说明很多问题,这里我尝试用它来说明“为啥企业应用需要引入业务流程概念和相关的业务流程引擎”。

1、我们先从C的Hello World开始:(不会汇编语言,否则先来一个汇编实现的“Hello World” 8) )
[code]
int main(int argc,char * argv[]){
        return  printf("Hello world!/n");
}
[/code]
C是过程语言,上面这个直接就打印“Hello world”,程序结构不好,下面这个好点:
[code]
void main(int argc,char * argv[]){
      sayHello();
}

void sayHello(){
   printf("Hello world!/n");
}
[/code]

2、再看看如果是使用OO语言(C++或Java),这个Hello World是如何的。下面以java为例:
[code]
public class Person{
      private String name;
      public Person(String name){
         this.name = name;
      }
      public void sayHello(){
          System.out.println(name+" hello world !");
      }
      //
      public static void main(){
           new Person("张三").sayHello();
      }
}
[/code]

OO语言的Hello World当然可以写成像过程语言一样,但这样的话不能发挥OO语言建模的优势,所以我们稍微写的复杂了点,多了一个Person对象,最后main里的一句就很清晰了:“张三说Hello”。

3、上面是张三一个人大喊“Hello World”,假设张三开了一公司,每天早上8:00一上班要带着他的一帮员工喊“Hello World”,这个程序乍写?
试着用java写一个(主要部分):
[code]
...
public static void main(){
       Company company = new Company("张三实业有限公司");
       company.getBoss().sayHello();
       company.getAllEmploy().sayHello();
}
...
[/code]
到目前为止还不错,我们还能轻松解决。

半年以后,张三的公司业务发展,部门增加了。现在每天的“Hello World”流程是这样的:
 :shock: 总经理先带着各部门经理喊"Hello world",然后各部门经理回各部门带部门员工喊。
这还不够,因为现在管理也加强了 :evil: 。喊完之后,上级领导要“审批”一下,不满意的,大家要重喊,直到通过为止。

如果我们再用上面的方式来实现,可以预见的是:因为多个部门,会需要在程序流程中加入一些循环(for)或嵌套,还要加入一些判断(if-else/while)来实现审批。

这样写出的程序已经很难一眼看出它所建模的真实世界了。

同时,我们也会头痛的想到:如果“张三实业有限公司”明年变成一个“全球500强”跨国公司,这个“Hello world”流程还指不定会复杂到啥程度去?!

这时我们如果引入一个带图形定义工具的业务流程(或工作流)软件的话,解决方案是这样的了:
[code]
...
public static void main(){
       Company company = new Company("张三实业有限公司");
       company.startProcess("HelloWorld");
}
...
[/code]
下面是这个HelloWorld流程(省略了各部门流程,使用Joinwork的建模工具画的):
   .........[img]http://www.joinwork.net/tec_image/HelloWorld.JPG[/img]

引入业务流程后,我们新的[b]企业级[/b]Hello World有这些好处:

1、更清晰、直观地建模了有多人协作活动的真实客观世界;
 —— 这一点非常重要。OO语言相对过程语言为啥更好? 最重要的就是OO语言对现实世界的建模能力更强了。一般商业工作流软件都基于Petri网理论来对流程建模,专门用于流程建模的Petri网能描述的流程模式(比如隐式分叉)有一些是其他建模方法不能做到的。
 :arrow: 另外,如果建好的模型不能图形化展现,哪这第一点的好处就要大打折扣了。

2、建模本身就是实现。
 —— UML也能给业务流程建模,可UML描述的模型还需要语言实现,这就很不方便了。几乎所有的流程软件,在建模完成之后,都有配套的流程引擎直接解释执行。

3、能用一致的语言描述业务流程
 ——OO有一套完整的语义:对象、继承、多态、重载等,流程也一样:流程模板、实例、任务、活动、参与者等。使用这些描述流程的语言,开发人员和一般业务分析人员更容易交流。

4、业务流程逻辑与程序逻辑的分离
——原来需要if-else/for等程序逻辑来实现的业务逻辑,现在通过分离的流程建模语言(XPDL等)来实现,这些建模语言一般还有图形化的工具。分离带来的好处是:可以不改或者少改程序逻辑,只要更改流程模型就可以满足经常变化的业务流程。

 :idea: 总结一哈:

上面的Hello World程序从“打印Hello”、“说Hello”、“一个人说Hello”、“多个人按一定规则说Hello”,实现的内容和形式,不仅越来越接近现实世界,而且越来越接近现实社会。随着问题的深入扩大,我们需要理解更多的概念和掌握更强大的工具(过程语言、java/C++、流程引擎)。