`
jeffen2006
  • 浏览: 259855 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多

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

一、基本没有工作流概念,建一个流程表,一张大横表,每一个环节是一个字段,用一些标识代表状态,如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的流程



分享到:
评论
1 楼 webjlwang 2007-04-23  
还是啊,最主要的就是怎样将他们用起来,能集成到系统中来,能比较容易进行流程的流转,定义,管理,但看看这些庞大的开源工作流就感觉到恐怖。

相关推荐

    思维导图 -产品经理技术知识汇总.pdf

    - **客户端开发**:负责移动端或桌面端应用的开发工作。 - **服务端开发**:构建后端服务和API接口。 - **产品测试**: - **黑盒测试**:验证功能是否符合预期。 - **白盒测试**:检查代码质量和安全性。 - **...

    fdr-android:FreeDomainRadio.com Android应用程序

    【标题】"fdr-android: FreeDomainRadio.com Android应用程序"是一个专门为FreeDomainRadio.com网站创建的安卓应用。这个项目旨在为用户提供一个方便的平台,让他们能够通过移动设备访问该网站的内容,尤其是那些对...

    云开发mbti人格类型测试助手微信小程序源码.rar

    云开发是腾讯云提供的一种免运维、低门槛、高效率的后端开发服务,它允许开发者在微信小程序、小游戏等应用中直接使用云端能力,无需搭建服务器,减少了传统后端开发的工作量。云开发提供了数据库、存储、函数计算等...

    Python语言程序设计与应用-教学大纲.docx

    Python语言程序设计与应用教学大纲 本课程主要学习Python这种简单的常用的数据分析处理编程语言。Python是做大数据分析的开发语言首选,也是学习机器语言需要掌握的编程语言之一。教学的主要目标是使学生掌握...

    SpringOne-Using Spring Security 2

    - 在软件设计方面有深入思考,不仅限于安全设计; - 正在撰写一本关于Spring Security的德语书籍。 #### 安全性是艰难的! 让我们借助工具的力量来应对这一挑战! #### 议程 - 它是什么? - 如何保护Web应用...

    2-金浩-3-FFA2019分论坛开源大数据-金浩_compressed1

    在这个讨论中,我们将关注的是针对流式数据处理的基准测试,这对于实时分析、物联网(IoT)应用和大规模数据流处理至关重要。 **数据集**是任何基准测试的核心部分。在流式处理基准测试中,数据集通常包括大量的实时...

    ARM & Linux嵌入式系统实验教程

    通过以上几个实验,读者不仅能够深入了解ARM架构下的Linux嵌入式系统开发流程,还能掌握从操作系统安装到应用程序开发的一系列关键技术。这些技能对于从事嵌入式系统设计和开发的专业人士来说至关重要。在后续的学习...

    百度智能小程序平台的架构思考与实践.pdf

    智能小程序是轻量级的应用程序,它们运行在主要的移动操作系统之上,通过百度智能小程序平台提供的框架和API进行开发。它不仅能够运行在百度App内,也支持跨平台的运行能力。 在架构设计方面,百度智能小程序平台...

    深入理解Android:卷I--详细书签版

     Android系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容可能正是他们在工作和学习中最想了解的。那些对具体模块(如Audio系统和Surface系统)感兴趣的读者 也可以直接阅读相关章节的内容。 ...

    meARM连续循环程序

    3. **编程教育价值**:对于初学者而言,这款程序不仅能够帮助他们快速掌握机械手臂的工作原理,还能够培养他们的编程思维和动手能力。 总之,meARM机械手臂及其开发程序为爱好者提供了一个很好的平台,不仅可以学习...

    TestGoal.Result-Driven.Testing

    - **ASP.NET**:微软提供的一种服务器端Web应用程序框架,常用于构建动态网站、Web应用程序和服务。 - **C#**:一种面向对象的编程语言,由微软开发,广泛应用于Windows平台的软件开发。 - **J2EE**(Java 2 ...

    xournal-0.4.8.2016-win32.zip

    Xournal是一款专为Windows系统设计的开源手写笔记应用,其0.4.8.2016版本的安装包以"xournal-0.4.8.2016-win32.zip"的形式提供。这个压缩包包含了运行Xournal所需的一系列动态链接库(DLL)文件,使得用户可以在电脑...

    “Java程序设计”课程教学思考.pdf

    可以选择游戏开发、数据分析、Web应用等领域的案例,让学生看到Java在实际生活和工作中是如何应用的。同时,案例应随着课程进度逐步增加难度,挑战学生的思维能力。 6. 评估与反馈 定期的编程作业和测试可以检验...

    Erlang初级入门(英文pdf)

    - **不中断维护**:软件维护工作必须在不影响系统正常运行的情况下进行。 - **严格的品质与可靠性要求**:电信系统对于稳定性和可靠性有着极高的要求。 - **容错能力**:系统需要能够容忍一定程度的错误并继续运行。...

    DubboCloudNative之路的实践与思考.ppt

    Cloud Native技术使得企业能够在公有云、私有云以及混合云环境中构建和运行可扩展的应用程序。其中,核心组件包括容器、服务网格、微服务、不可变基础设施以及声明式APIs。在这一背景下,Dubbo作为一款流行的Java...

    【重磅】史上最全的阿里云分享的云原生技术学习资料合集(120份).zip

    函数计算在 双11 小程序场景中的应用 基于 K8s 扩展机制实现 PaaS 平台云原生演进 金融级云原生 PaaS 探索与实践 客如云容器化改造经验 蚂蚁金服双十一 Service Mesh 超大规模落地揭秘 全民双十一:基于容器服务的...

    spring-配套代码

    Spring 框架是 Java 后端开发中的一个重要组成部分,尤其在企业级应用开发中广泛使用。...记得在学习过程中,不断思考每个组件的作用以及它们如何协同工作,这将有助于你成为一名更优秀的 Java 后端开发者。

    java思考

    这篇博客“java思考”可能探讨了Java在实际开发中的应用、设计原则或者一些技术挑战及其解决方案。 标签“源码”意味着讨论可能涉及Java的内部机制、源代码解析或者是对开源项目进行的分析。深入理解源码是提升编程...

Global site tag (gtag.js) - Google Analytics