登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

关于工作流,从“Hello World”谈起  

2007-02-03 10:53:29|  分类: 电脑知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天看到一篇文章,写得挺幽默的,供大家参考。原文如下:

我们学习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++、流程引擎)。

 

  评论这张
 
阅读(650)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018