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

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

    博客分类:
 
阅读更多

整体

  • 面向接口:消息系统,持久系统等,其实现都是可替换的,主干代码对实际的消息系统或持久系统等一无所知
  • 组件复用:Visio对象及Visio模具的使用目前来看取得了极好的效果,极大缩短开发周期、增强功能、并自动将数据与视图进行了相当程度的分离,并且比Jawe等设计器漂亮多了
  • 基于SOA:平台所有接口都是通过WebService提供的,提高了复用和跨平台能力;实际上,平台是.Net开发的,而目前支撑的几个应用则是J2EE的
  • 服务网关/接口:平台核心功能以类库的形式提供,所有暴露出的接口都是薄薄的一层WebService包装(服务接口);对接口的访问也以类库的形式提供,隐藏了对WebService的调用(服务网关)
  • 遵循标准:对WfMC的遵循使开发组少走了不少弯路,因标准即使不是最佳方案,亦已对常见问题深思熟虑,对缺少业务专家的开发组来说有相当的指导作用;并且开源软件提供了参考实现,与开源软件的互操作验证了产品的正确性

模块

  • 通用查询接口:Decorate/Composite

实现手段近似,意图不同

/// <summary>

/// 通用的条件接口,使用Object类型的参数,将类型安全检查踢给子类

/// </summary>

public interface ICondition {

 

/// <summary>

/// 返回传入对象是否满足本条件

/// </summary>

/// <param name="obj">传入对象</param>

/// <returns>传入对象是否满足本条件</returns>

bool Calculate(Object obj);

 

/// <summary>

/// 返回本条件的字符串表示,用于WebService的参数传递

/// </summary>

/// <returns>本条件的字符串表示</returns>

String GetString();

 

/// <summary>

/// 将传入的字符串还原为条件对象

/// </summary>

/// <param name="condition">原始条件对象的字符串表示</param>

void SetString(String condition);

}

 

[Serializable]

public abstract class BaseCondition : ICondition{

//一些缺省实现,定义了几个Template Method

//

}

 

/// <summary>

/// 通用的全部条件接口

/// </summary>

[Serializable]

public class AllCondition:BaseCondition {

public override bool Calculate(Object obj){

return true;

}

}

 

/// <summary>

/// 通用的与条件接口,当所有条件都为true时返回true

/// </summary>

[Serializable]

public class AndCondition:BaseCondition {

private IList conditions;

public AndCondition(IList conditions){

this.conditions = conditions;

}

public AndCondition(){

this.conditions = null;

}

 

public override bool Calculate(Object obj) {

foreach(ICondition condition in conditions){

if( !condition.Calculate(obj) ){

return false;

}

}

return true;

}

}

 

/// <summary>

/// 通用的或条件接口,当所有条件都为true时返回true

/// </summary>

[Serializable]

public class OrCondition:BaseCondition {

private IList conditions;

public OrCondition(IList conditions){

this.conditions = conditions;

}

public OrCondition(){

this.conditions = null;

}

public override bool Calculate(Object obj) {

foreach(ICondition condition in conditions){

if( condition.Calculate(obj) ){

return true;

}

}

return false;

}

}

 

/// <summary>

/// 通用的非条件接口,返回与原条件相反的结果

/// </summary>

public class NotCondition:BaseCondition {

private ICondition condition;

public NotCondition(ICondition condition){

this.condition = condition;

}

public NotCondition(){

this.condition = null;

}

public override bool Calculate(Object obj) {

return !condition.Calculate(obj);

}

}

  • 通用工作流模型:Abstract Factory

虽说XPDL是标准,但各个厂家的扩展属性并不相同,流程设计器和引擎需要兼容各个厂家的模型,就需要用Abstract Factory,各家的工厂生产各自的对象体系,当然接口相同,流程设计器和引擎只对接口操作

public interface ModelFactory {

PDPackage CreatePackage();

PDPackageHeader CreatePackageHeader();

PDProcesses CreateProcesses();

PDExtendedAttributes CreateExtendedAttributes();

PDTransitions CreateTransitions();

PDProcess CreateProcess();

PDActivitySet CreateActivitySet();

PDDataField CreateDataField();

//……

//

}

 

public class JaweModelFactory:ModelFactory {

public PDProcess CreateProcess() {

return new JawePDProcess(this);

}

//……

//

}

  • 组织适配器:Adaptor

流程设计器和引擎和流程监控工具等看到的只是系统内部定义的类似Party模式的组织模型,外界实际的组织模型需要以单独编写适配器的形式接入到平台中来;如我们开发时的组织数据存放在Xml文件中,几个实际应用的组织数据存放在公司的数据库中,我们用两个适配器将原有模型适配进来,使用时配置一下即可:

<organization_adaptors>

<add key="current" value="usa_db" />

<add key="usa_xml" value="Nucleus.Organization.UseModel.UseAdaptor" />

<add key="usa_db" value="Nucleus.Organization.UseMisModel.UseMisAdaptor" />

</organization_adaptors>

  • 流程描述与流程定义:Item and Item Description

流程设计器和流程监控工具和应用等首先看到的只是流程的描述,选中某个流程后才会去获得真正的流程定义

待改进之处极多,优先的几个:

  • 微内核:将引擎重构为一个简单的内核与围绕着内核的一组适配器
  • 分离调度系统与信息系统:查询时应不需要引擎的参与,引擎负责流程调度,信息系统应承担的工作需剥离开来,提高性能
  • 提供控制台:改变手工修改配置文件、注册适配器的局面
  • 统一界面框架设计:改变缺少界面规范或模板、界面风格不统一、代码结构不统一的现状
  • 剥离对第三方商业产品的依赖:设计器的视图部分增加一个抽象层,隔离Visio组件,毕竟有成本问题
  • 要不要语言独立?J2EE平台和.Net平台的相似,Java和C#的相似,提供了若干诱惑,有了一套主干代码,两套平台适配器的想法,并且公司目前的项目即存在对J2EE工作流平台的需求;肯定已经有很多成功项目这样做了,问题在于我们的资源,再讨论一下

开源了目前使用的XPDL解析器,希望能得到反馈

http://cosoft.org.cn/projects/xpdlparser

分享到:
评论

相关推荐

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

    Activiti作为一款开源的工作流引擎,其强大的流程定义能力以及良好的扩展性使其成为了很多企业的首选。 本文将详细介绍如何在前后端分离的项目中引入Activiti工作流引擎,并结合具体的步骤和注意事项,帮助开发者...

    JWFDv0.96 开源工作流系统-二次开发与API简易说明.doc

    JWFDv0.96是一款基于Java技术的开源工作流管理系统,适用于企业级应用的流程设计与管理。该系统支持二次开发,并提供了一套完整的API接口供开发者使用。本文档旨在详细介绍JWFDv0.96的二次开发包及API接口,帮助...

    SAP 工作流

    - 在弹出的列表中选择“活动(Activity)”,为工作流添加第一个任务节点。 - 例如,可以定义一个名为“创建休假申请”的任务节点,使用系统预设的标准任务“TS70007918”。 ###### 2.4 设置代理人(Agent) - 在“代理...

    sharepoint2007多级审批工作流Sequential版

    ### SharePoint 2007 多级审批工作流 Sequential 版 #### 一、引言 在企业级应用中,工作流(Workflow)是确保业务流程自动化和规范化的关键环节。SharePoint Server 2007 作为一种强大的企业级协作平台,提供了...

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

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

    工作流管理习题答案.pdf

    在第一章中,习题涉及到工作流的基本构造,包括顺序、选择、并行和迭代。顺序是指任务按照预设的顺序依次执行;选择则是根据特定条件仅执行其中一个任务;并行任务可以同时进行,不依赖特定顺序;而迭代则指任务可能...

    软件详细设计第一次平时作业1

    在软件详细设计中,软件体系结构模型扮演着至关...总结“4+1”视图,它为全面理解软件系统提供了多角度的视角,帮助设计者确保系统在功能、开发、执行和部署等多个层面的协调一致,从而提高软件质量并降低维护成本。

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

    1. 先一次,后二次:当图中有一次接线和二次接线同时存在时,应先看一次部分,弄清是什么设备和工作性质,再看对一次部分起监控作用的二次部分。 2. 先交流,后直流:当图中有交流和直流两种回路同时存在时,应先看...

    计算机安全保密:第五讲 对称密钥硬件设计.ppt

    3DES是基于DES(Data Encryption Standard)的增强版,通过三次应用DES算法以增加安全性。然而,由于其较长的加密时间,3DES在现代应用中通常被更高效的AES所替代。 在FPGA实现这些算法时,设计师需要考虑功耗、...

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

    第一次拉深尺寸的计算则依据零件的几何形状和拉深工艺特性,以确保拉深过程中材料的均匀流动。拉深件的工艺分析和确定拉深次数是为了避免过度变形导致的裂纹或起皱。工艺方案的选择是基于工艺可行性和经济性的考虑。...

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

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

    计组第一次实验报告总结.pdf

    在这个实验报告中,我们重点关注了寄存器及数据输出的相关知识,这是理解计算机工作原理的关键环节。 首先,寄存器是计算机内存中非常小且快速的存储单元,它们在数据处理和指令执行中扮演着至关重要的角色。在COP...

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

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

    机电控制工程基础:自控第一次习题课(1-3章)-2014.ppt

    总结来说,《机电控制工程基础》这门课程主要涵盖了自控系统的概念、基本控制方式、系统性能要求、反馈控制原理、数学建模方法以及传递函数的计算,这些都是理解和设计自动化系统的关键知识点。通过学习这些内容,...

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

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

    细线圈与圆的创意封面扁平化工作总结报告PPT模板.pptx

    2. **创意封面设计**:封面是PPT的第一印象,此模板中的创意封面利用线条和圆圈元素,创造出引人入胜的视觉效果,同时提供了一个空白区域,供使用者添加自己的主题或个人信息,使得每个报告都能个性化定制。...

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

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

    Java语言程序设计 基础篇 原书第10版 ,梁勇著 ,P656

    其设计目标是“一次编写,到处运行”,这得益于Java虚拟机(JVM)的存在,它允许Java程序在任何支持JVM的设备上运行。 Java语言的特点包括: 1. **面向对象**:Java是一种面向对象的语言,支持类、对象、接口等...

    超酷的流水灯程序,间隔300ms先奇数亮再偶数亮

    标题与描述中的“超酷的流水灯程序,间隔300ms先奇数亮再偶数亮”指...它不仅展示了微控制器的基本操作,如I/O口控制和定时器设置,还体现了编程中的控制流设计,对学习者理解和掌握微控制器的应用具有重要的教育价值。

Global site tag (gtag.js) - Google Analytics