思考:开源工作流在应用程序中的位置--80%

原创 2006年11月03日 13:35:00

我工作以来所经历的项目是依次如下

一、基本没有工作流概念,建一个流程表,一张大横表,每一个环节是一个字段,用一些标识代表状态,如0未完成、1已完成、x异常、c撤单...,程序员自己编码维护,而且绝大多数的情况都是业务逻辑、流程控制、数据库读写混在一起 。这主要适合流程单一、改动不大、用户数较少的系统,但是也带来了很多开发、测试、维护的问题。而且随着程序的逐渐庞大,这些问题也会愈演愈烈,最终的解决就是推倒重来,上2版。

二、后来的项目有一些改进,虽然同样没有采用工作流,但是对整个应用程序进行了合理的分层,如下:

view(视图层。仅仅与用户进行交互:接受用户输入请求、信息展现)
control(控制层。调用业务层方法、流程控制)
model1(模型层-业务逻辑层。所有的商务逻辑在此处实现。)
model2(模型层-持久化层。仅仅负责数据的持久化,就是将暂态的数据保存成定态的)

这就是经典的MVC模式,下层独立于上层,这样的好处是类似于模块化各个功能,便于拆卸。比如,模型层分为2层,这样我们可以在保持业务逻辑层代码不需要改变的情况下轻松的实现下层的切换,比如原来我们是持久化到mysql进行前期开发的,现在上线了要切换到oracle。甚至是我们不采用数据库了,采用xml来存储数据。

回到我们工作流的主题,MVC的工作流处理一般在"C",如用struts的action来实现,调用"M"将流程信息保存到自己建的数据表中,对于流程复杂多变的项目,这个自行设计的工作流是很有难度的。稍有不慎或者设计师偷点懒就会变成文章开头所说的混乱局面。为了避免这种情况有一种实用方法是,将C和M分得再开一点,在它们中间引入了业务代理接口层,C不直接调用M中的类,而是调用这个代理接口,代理接口定义了所有的业务处理方法,仅仅是定义,实现全部在M层实现。

同时还有另一个好处,我们可以在保持业务逻辑层不变的情况下随意的开发上面的client端,既可以是B/S也可以是C/S;或者在保证前端客户程序不变的情况下随意的更改后台实现,ejb/ormapping/jdbc+javabean。

上面的系统仅仅是将应用的各层进行了合理的划分,变相缓解了工作流编码的压力,但是我们还是要自行维护工作流数据与业务数据的关系,还是将工作流和业务关联的非常紧,甚至将工作流数据看作是业务数据的一部分。如何才能有效地将工作流数据和业务数据进行解耦呢?这才是我们问题的核心。

 三、前段时间看了开源工作流jbpm,它为我们做了很多事:

  • 设计好的工作流定义规范——我们只需要定义一个xml,里面包含相应的元素(如:分支节点、汇聚节点、判断节点、任务节点)就可以表示一个流程,甚至有一个ide工具,我们可以通过拖拉完成流程框架的定义。
  • 设计好的工作流持久化方案——我们只需要运行一个命令就可以在指定的数据库(包括oracle/mysql/mssqlserver/sybase等10余种数据库)中生成工作流表(大概25张表,你自己设计的工作流肯定没有那么全面)。编程的时候,我们不需要知道这些表,因为jbpm已将这些表映射成了对象,我们只需要操作java对象,所以这些表我们不需要修改。
  • 还有一些好的功能,比如:任务定时器,到指定时间任务自动执行;在一个xml中指明日历中那些是工作日期、哪些是工作时间;结合JMS实现异步工作流;结合Jboss rules实现规则引擎...

虽然他解决了很大一部分工作,但是我们还是要面对了很多挑战:

  •  如何应用到我们现有的应用层次中,保证各层之间低耦合。
  • 如何和我们现在的组织模型结合,完成任务的分派便捷性。
  • ...还有的要去实践中挖掘了。

 这里有我的一些想法,还不是很成熟:

jbpm是默认采用hibernate做持久化的,可以将jbpm的流程

Activiti工作流引擎使用

1. 初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施...
  • xwnxwn
  • xwnxwn
  • 2016年08月24日 20:41
  • 4452

Activiti工作流引擎使用

Activiti工作流引擎使用 1.简单介工作流引擎与Activiti 对于工作流引擎的解释请参考百度百科:工作流引擎 1.1 我与工作流引擎 在第一家公司工作的时候主...
  • xyw591238
  • xyw591238
  • 2016年06月06日 17:01
  • 5409

共有90款 工作流引擎开源软件

共有90款 工作流引擎开源软件,第1页 java工作流引擎,开源工作流引擎,工作流引擎是什么,工作流引擎设计,工作流引擎介绍,.net工作流引擎,工作流引擎比较,工作流引擎内核揭秘,.net开源...
  • gysea123321
  • gysea123321
  • 2016年07月07日 12:34
  • 5068

Java三大主流开源工作流引擎分析

三大主流工作流引擎:Shark,osworkflow,jbpm的比较和选择。
  • wacky
  • wacky
  • 2016年08月09日 14:25
  • 29764

asp.net+mvc 快速开发平台,强大工作流引擎,精美UI,给开发一个加速度!

公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个快速开发平台。 我们主要的业务是做OA、CRM、ERP一类的管理系统,一个通用的后台搭出来,再配合一些快速开发的组件开发效率能...
  • endless0709
  • endless0709
  • 2017年03月10日 09:48
  • 6598

Activiti工作流引擎使用

http://www.open-open.com/lib/view/open1350460225367.html
  • bluejoe2000
  • bluejoe2000
  • 2014年09月16日 14:08
  • 8326

Java三大主流开源工作流引擎技术分析

首先,这个评论是我从网上,书中,搜索和整理出来的,也许有技术点上的错误点,也许理解没那么深入。但是我是秉着学习的态度加以评论,学习,希望对大家有用,进入正题!         三大主流工作流引擎...
  • freedomv_coder
  • freedomv_coder
  • 2016年01月11日 21:27
  • 19497

.NET 开源工作流引擎Slickflow介绍

前言:工作流系统通常是作为中间组件嵌入到企业业务系统应用中去,作为业务流程构造和重整的重要工具,工作流系统的实现主要要考虑以下几点要素:1. 工作流模型要符合一些标准化模型的定义;2. 工作流管理系统...
  • besley
  • besley
  • 2013年04月23日 12:17
  • 5332

工作流系统之三十一 回退流的实现

在流程建模的时候,定义好了返回的线路,这种严格来说,不是回退流。例如,审核不通过,则返回重新填写,这种只是条件路由。 工作流的回退流,是流程实例在流转的过程中,可以回退到运行轨迹的任意步骤,同时还可...
  • LikeLaura
  • LikeLaura
  • 2016年10月14日 19:37
  • 653

学习开源驰骋工作流引擎的难点是什么?

前言: 为什么有的人可以用好ccflow,有的人就用不起来?为什么别人行,你而没有使用成功?学习ccflow的难点是什么?这里我们作为官方技术支持人员,总结如下几条,还望以前没有用好ccflow的朋...
  • jflows
  • jflows
  • 2015年12月18日 18:23
  • 1264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:思考:开源工作流在应用程序中的位置--80%
举报原因:
原因补充:

(最多只允许输入30个字)