`
chelsea
  • 浏览: 117839 次
  • 来自: ...
社区版块
存档分类
最新评论

工作流:第二次发版,设计总结

 
阅读更多

工作流第二版设计总结

一、Existing Problems

  1. 没有进一步总结工作流领域模型,还基本停留在第一版的层次上,导致:

  • 层次不甚清楚

  • 增加新功能困难

  • 事务脚本过多,带来重复代码

  1. 组件职责相对混乱,尤其是服务组件与其它模块耦合太多,应更清晰的定义一个内核服务层

  2. 没有做并发设计,导致:

    • 性能低下

    • 存在死锁可能

二、Design Principles

针对接口编程与控制反转

整个系统针对接口编程,降低了编译时依赖;利用IoC,通过配置来组装系统,定制运行时行为;带来的最大好处就是,我们获得了一个可在分布式和嵌入式之间通过配置切换的引擎,不需要修改源代码,大大提高了持续集成的方便性和速度,提高了适用性

三、Architecture Patterns

1、分层(POSA1)

通用类库:供所有其它层调用

内核服务层:供内核调用

内核:独立运行或作为普通类库被调用

内核开发包:开发外围服务时使用

外围服务:与内核一起运行,供应用开发包调用

应用开发包:开发具体应用时使用

具体应用:调用应用开发包来与系统交互

其中,内核中的工作流领域模型又分三层

语法层:负责将流程定义的文本形式转化为内存对象

语义层:负责将这些内存对象无意义的扩展属性解释为有意义的模型属性

实例层:表示运行期的语义层对象,其中各个属性使用运行期实际的值来实例化

2、微内核(POSA1)

  • 内核服务层+内核,完成了最基本的工作流引擎,如实例化流程并调度之,产生任务表,处理消息请求等;

  • 外围服务则提供了做为一个产品化的工作流引擎所必备的特性,如持久化,超时处理,任务通知,查询接口,命令接口等

  • 外围服务以插件的形式配置到系统中

四,Design Patterns

1、领域模型(PEAA)+Visitor(GoF)+事务脚本(PEAA)+命令处理器(POSA1,GoF)

Problem:

  • P1:目前对工作流领域模型了解的不够透彻,而开发过程中需要不断增加目前的模型不能直接支持的功能,如撤回、回退等

  • P2:如果坚持使用领域模型,则增加一个功能基本对应着为领域对象增加相应的方法,则同时增加多个功能时,增加了并行开发和版本控制的难度,降低了开发效率

Constraint:

  • C1:需要在不修改领域模型的情况下动态增加功能

  • C2:需要在不修改领域模型的情况下动态为客户端提供新功能调用接口

Solution:

  • S1:使用“领域模型(PEAA)”为当前所了解的工作流领域建模,支持基本功能

  • S2:使用“Visitor(GoF)”为领域模型动态添加功能,这些功能通常还不是很清晰,需要迭代开发,逐渐合并到领域模型中

  • S3:使用消息对象为客户端动态的添加调用接口,使用“命令处理器(POSA1,GoF)”为服务端动态的增加相应的处理接口

  • S4:命令处理器的执行体则是“事务脚本(PEAA)”,它调用领域对象的方法,或“Visit”领域对象来完成功能;目前这一部分存在重复代码,需要进一步弱化或减少事务脚本,丰满领域模型;另一种方案就是“元工作流”,即工作流系统中的事务脚本也用工作流来实现,困难在于抽象出一个工作流的元层次

2、主动对象(POSA2)+异步完成标志(POSA2)

用于自动型活动;自动型活动在自己的线程中独立、主动的运行,从引擎传入的异步完成标志中获取参数,执行完毕后将结果填写到异步完成标志中,并向引擎发送完成消息,以使“堵塞”的流程继续运行(此处的“堵塞”并不是真的堵塞,而是当自动型活动对流程来说必须是同步完成的时候,流程的一种无所事事的状态);这里更像是“收集参数(TDD)”模式,而不是异步完成标志

3、反应器(POSA2)+监听器

用于将内核事件发送给外围服务,实际上是一种手工AOP实现,下一版可将目前手工触发事件的地方重构为pointcuts,将监听器重构为advisors

4、插件(PEAA)

用于将外围服务动态配置到系统中

5、查询对象(PEAA)

就是前一版的“通用查询接口”,这一版用“Generic + Functional Programming”重构了一下;目前系统中所有的查询条件都是通过查询对象来设置和获取的,问题时效率较低

6、包装器外观(POSA2)

用于对Xml、消息系统等外部资源的访问,在将系统从.Net平台移植到J2EE平台时,该模式发挥了巨大作用,大大缩短了移植时间

See Also:

工作流:第一次发版,设计总结

分享到:
评论

相关推荐

    前后端分离项目中引入activiti工作流引擎

    ### 前后端分离项目中引入Activiti工作流引擎 #### 一、概述 在当前的软件开发中,前后端分离已经成为了一种常见的架构模式。这种模式将前端的用户界面与后端的数据处理逻辑分开,提高了开发效率,同时也使得系统...

    sharepoint2007多级审批工作流Sequential版

    2. **第二级审批**:由中级审批者进行二次审核。 3. **第三级审批**:由高级审批者最终批准。 每级审批过程中,若审批者选择拒绝,则工作流应回退至前一级审批者重新审核。此外,每一级审批完成后,还需发送通知给...

    SAP 工作流

    本文档将详细介绍如何使用SAP工作流编辑器来设计一个关于员工请假申请的基本工作流模板,并利用SAP工作流引擎来运行所创建的模板。 ##### 2. 步骤详解 ###### 2.1 输入事务代码“SWDD” - 首先打开SAP GUI,输入...

    电气二次回路学习总结.doc

    电气二次回路学习总结 一、电气二次回路的基本特点 电气二次回路的最大特点是逻辑性很强,其设备、元件的动作严格按照设计的先后顺序进行。因此,在看图时,只要抓住一定的规律,就会很容易设计的先后顺序进行。 ...

    冷冲压模具课程设计说明书盖的二次拉深模具设计说明.doc

    本次课程设计的任务是对盖的二次拉深模具进行设计,旨在让学生掌握冷冲压模具设计的基本理论和方法。通过这个设计项目,学生可以了解冷冲压工艺流程,学习如何计算和确定零件尺寸,如毛坯尺寸、拉深尺寸以及确定拉深...

    成信工作流引擎体系架构与介绍

    工作流的启动是整个流程管理的第一步,它标志着一个特定业务流程的开始。成信工作流引擎采用了单一的启动节点模型来确保流程的唯一性和可控性。 **1.1.1 启动节点(SingleStartNode)** 启动节点作为工作流的第一个...

    C程序设计语言 第二版 英文版 pdf(非扫描版)

    以上是对《C程序设计语言 第二版 英文版 pdf(非扫描版)》中所包含的知识点的总结。这本书是一份完整的C语言学习资源,适合初学者和有经验的程序员使用。通过阅读本书,读者不仅能够掌握C语言的基础知识,还能够...

    四川大学操作系统课程设计高分报告-第二次实验-shell编程基础.doc

    【四川大学操作系统课程设计】的第二次实验主要围绕Shell编程基础展开,旨在让学生深入理解Linux操作系统中的核心概念,如C语言开发工具的使用、进程管理和通信。实验内容包括一系列基于系统调用的编程实践,如fork...

    工作流管理习题答案.pdf

    总结起来,这些习题涵盖了工作流管理的基本概念和Petri网的实用技巧,有助于学习者理解和应用这些工具来分析、设计和优化各种业务流程。通过解决这些习题,学生可以掌握如何使用Petri网来表示和控制复杂的并发系统,...

    金蝶KIS专业版二次开发技术详解

    4. 工作流开发:对于涉及审批流程的业务,开发者可以构建工作流引擎,定义审批规则,实现业务流程的自动化。 四、开发工具与环境 金蝶KIS专业版通常使用金蝶开发工具(如金蝶K/3 SDK或金蝶BOS)进行二次开发,这些...

    入门教程MO二次开发教程

    熟悉这些配置步骤是开始二次开发的第一步。 2. **编程语言**:MO平台通常支持多种编程语言,如Python、Java或PHP。选择一种熟悉的语言,学习其与MO平台的集成方式。 3. **API接口**:MO平台提供的API接口是二次...

    二十三种设计模式【PDF版】

    《Thingking in Java》(第一版中文)是这样描述设计模式的:他在由 Gamma, Helm 和 Johnson Vlissides 简称 Gang of Four(四人 帮),缩写 GoF 编著的《Design Patterns》一书中被定义成一个“里程碑”。事实上,那本书...

    Ecology9泛微平台二次开发基础知识培训

    通过上述总结,可以看出Ecology9泛微平台二次开发基础知识培训旨在为企业用户提供一套全面的开发指南,涵盖从基础知识到实际操作的各个方面,帮助用户更好地利用这一强大的OA平台进行高效的工作流管理和业务流程自动...

    ENVI二次开发指南(pdf版)

    通过以上知识点的总结,我们可以看出ENVI二次开发涵盖了从基本编程概念到高级应用技术的各个方面,为用户提供了一个强大且灵活的平台,使得能够根据具体需求定制化开发遥感影像处理流程。这对于提升遥感数据分析的...

    JTangEJB二次开发手册

    **JTangEJB二次开发手册** 提供了丰富的技术指导和实践案例,旨在帮助开发者更好地利用JTangEJB模块进行系统设计和开发。通过深入理解文档中涉及的概念和技术,开发者可以有效地扩展JTangEJB的功能,满足特定项目的...

    基于面向对象的制造业CAD多版本二次开发与移植.pdf

    总结以上内容,本文档对面向对象的制造业CAD多版本二次开发与移植提供了详细的指导和实践案例,特别是在多版本软件环境中如何保持开发效率和移植的便捷性。通过分析和实践,本案例成功找到了一种能够适应不同CAD版本...

    代码大全第二版

    ### 《代码大全第二版》知识点总结 #### 1. 指针概念与使用 - **指针声明符**(*): 在C++中用于声明指针类型的标识符。例如,在`int *p;`中,`*`表明`p`是一个指向整型的指针。 - 出现位置:332、334-335、763 - ...

    Hadoop权威指南 第二版(中文版)

     MapReduce的工作流  将问题分解成MapReduce作业  运行独立的作业 第6章 MapReduce的工作机制  剖析MapReduce作业运行机制  作业的提交  作业的初始化  任务的分配  任务的执行  进度和状态的更新  作业的...

    注塑模具结构及设计2.ppt

    - 型模架是模具的基础结构,PPT中展示了不同阶段型模架的状态,包括合模、第一次和第二次开模以及顶出过程,这有助于理解注塑模具的工作流程。 7. 设计考虑: - 在设计三板模时,必须充分考虑模具的耐用性、生产...

Global site tag (gtag.js) - Google Analytics