我们学习C,C++,java这类语言时,第一个入门程序一般都是“Hello World”。
这个经典的“Hello World”程序虽然简单,但也一样能说明很多问题,这里我尝试用它来说明“为啥企业应用需要引入业务流程概念和相关的业务流程引擎”。
1、我们先从C的Hello World开始:(不会汇编语言,否则先来一个汇编实现的“Hello World” )
代码:
int main(... ...){
return printf("Hello world!/n");
}
C是过程语言,上面这个直接就打印“Hello world”,程序结构不好,下面这个好点:
代码:
void main(... ...){
sayHello();
}
void sayHello(){
printf("Hello world!/n");
}
2、再看看如果是使用OO语言(C++或Java),这个Hello World是如何的。下面以java为例:
代码:
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();
}
}
OO语言的Hello World当然可以写成像过程语言一样,但这样的话不能发挥OO语言建模的优势,所以我们稍微写的复杂了点,多了一个Person对象,最后main里的一句就很清晰了:“张三说Hello”。
3、上面是张三一个人大喊“Hello World”,假设张三开了一公司,每天早上8:00一上班要带着他的一帮员工喊“Hello World”,这个程序乍写?
试着用java写一个(主要部分):
代码:
...
public static void main(){
Company company = new Company("张三实业有限公司");
company.getBoss().sayHello();
company.getAllEmploy().sayHello();
}
...
到目前为止还不错,我们还能轻松解决。
半年以后,张三的公司业务发展,部门增加了。现在每天的“Hello World”流程是这样的:
总经理先带着各部门经理喊"Hello world",然后各部门经理回各部门带部门员工喊。
这还不够,因为现在管理也加强了 :evil: 。喊完之后,上级领导要“审批”一下,不满意的,大家要重喊,直到通过为止。
如果我们再用上面的方式来实现,可以预见的是:因为多个部门,会需要在程序流程中加入一些循环(for)或嵌套,还要加入一些判断(if-else/while)来实现审批。
这样写出的程序已经很难一眼看出它所建模的真实世界了。
同时,我们也会头痛的想到:如果“张三实业有限公司”明年变成一个“全球500强”跨国公司,这个“Hello world”流程还指不定会复杂到啥程度去?!
这时我们如果引入一个带图形定义工具的业务流程(或工作流)软件的话,解决方案是这样的了:
代码:
...
public static void main(){
Company company = new Company("张三实业有限公司");
company.startProcess("HelloWorld");
}
...
下面是这个HelloWorld流程(省略了各部门流程,使用Joinwork的建模工具画的):
.........
引入业务流程后,我们新的企业级Hello World有这些好处:
1、更清晰、直观地建模了有多人协作活动的真实客观世界;
—— 这一点非常重要。OO语言相对过程语言为啥更好? 最重要的就是OO语言对现实世界的建模能力更强了。一般商业工作流软件都基于Petri网理论来对流程建模,专门用于流程建模的Petri网能描述的流程模式(比如隐式分叉)有一些是其他建模方法不能做到的。
另外,如果建好的模型不能图形化展现,哪这第一点的好处就要大打折扣了。
2、建模本身就是实现。
—— UML也能给业务流程建模,可UML描述的模型还需要语言实现,这就很不方便了。几乎所有的流程软件,在建模完成之后,都有配套的流程引擎直接解释执行。
3、能用一致的语言描述业务流程
——OO有一套完整的语义:对象、继承、多态、重载等,流程也一样:流程模板、实例、任务、活动、参与者等。使用这些描述流程的语言,开发人员和一般业务分析人员更容易交流。
4、业务流程逻辑与程序逻辑的分离
——原来需要if-else/for等程序逻辑来实现的业务逻辑,现在通过分离的流程建模语言(XPDL等)来实现,这些建模语言一般还有图形化的工具。分离带来的好处是:可以不改或者少改程序逻辑,只要更改流程模型就可以满足经常变化的业务流程。
总结一哈:
上面的Hello World程序从“打印Hello”、“说Hello”、“一个人说Hello”、“多个人按一定规则说Hello”,实现的内容和形式,不仅越来越接近现实世界,而且越来越接近现实社会。随着问题的深入扩大,我们需要理解更多的概念和掌握更强大的工具(过程语言、java/C++、流程引擎)。