打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
通用流程设计
  写在前面:本人文采不好,零星写过几篇随笔,但都不尽人意,本着共同学习共同进步的原则,还是打算把近期开发的一个通用流程的软件拿出来与大家分享。本流程软件能满足鄙人接触到了解到的一般的流程实现(由于接触到的流程有限,以及对流程理解的不够透彻,流程引擎中不免有设计不足或考虑不周,也希望大神们能多多指点),如果读者在阅读或使用过程中遇到什么问题或有什么想法,希望能拿出来与大家分享,我们共同去学习去完善这套流程引擎。本随笔打算只涉及流程引擎部分,可视化流程设计随后做单独的随笔推出。写作水平有限,望读者多多体谅...(如有问题可随时联系笔者。邮箱:455274752@qq.com)。欢迎加入流程交流群:251834323
  一、需求

  开发一套通用流程引擎软件,在主软件可以通过简单的注册、引用,即可完成软件流程部门的设计开发。

  二、抽象解决方案

  1.通过EntityFramework的CodeFirst实现流程有关的数据库表的创建。

  2.通过SilverLight实现流程的可视化操作。

  三、项目结构说明

 

  四、项目结构分析及代码

  一、Entities流程实体

  定义流程相关的数据库实体。

  

  1.WorkflowInitializer.cs 初始化数据库类,定义创建数据库时的默认数据。相关类定义如下:

View Code

  2.WorkflowDB.cs 继承System.Data.Entity.DbContext 定义流程引擎数据库上下文类。相关类定义如下:

View Code

  3.ModuleList.cs 模块类,主应用程序包含多个模块应用流程时,有此处区分具体模块需应用的具体流程。相关类定义如下:

View Code

  4.WorkflowMain.cs 流程主表类,定义流程相关的属性。相关类定义如下:

View Code

  5.WorkflowDetailed.cs 流程子表类,定义流程步骤的相关属性。相关类定义如下:

View Code

  6.TaskList.cs 任务表,定义针对处理人的相关任务信息。相关类定义如下:

View Code

  7.AnnexList.cs 附件表,针对任务处理时上传附件的需求。相关类定义如下:

View Code

  二、Abstract 接口

  定义外部访问的接口类。

  

  1.ConcreteFactory.cs 工厂类,对外提供接口的实例。代码如下:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace Workflow.Abstract 7 { 8     public class ConcreteFactory 9     {10         /// <summary>11         /// 创建具体实现的类的实例12         /// </summary>13         /// <typeparam name="T">接口类型</typeparam>14         /// <typeparam name="T2">具体实现</typeparam>15         /// <returns></returns>16         public static T CreateConcrete<T,T2>() where T2:T17         {18             return (T)Activator.CreateInstance<T2>();19         }20     }21 }

  2.Enums.cs 定义相关的枚举。代码如下:

Enums.cs

  3. I*Operation.cs 对应数据库表的相关操作。代码如下:

IModuleOperation.cs
IWorkflowMainOperation.cs
IWorkflowDetailedOperation.cs
ITaskListOperation.cs
IAnnexListOperation.cs

  4.IWorkflowOperation.cs 流程的总体操作。代码如下:

View Code

  5.IPersonList.cs 具体应用程序需实现的权限相关的人员接口。代码如下:

View Code

  6.PersonnelMode.cs 全局角色类型,通过单例模式实现对应用程序全局人员类型的管理。代码如下:

View Code

  三、Concrete接口的实现  

  对接口的具体实现。

  

  1. *Operation.cs 对应数据库表的相关操作。代码如下:

ModuleOperation.cs
WorkflowMainOperation.cs
WorkflowDetailedOperation.cs
TaskListOperation.cs
AnnexListOperarion.cs

  2.WorkflowOperation.cs 流程的总体操作。代码如下:

View Code

  3.PersonPersonnelMode.cs 人员类型中,人员的实现实例类。代码如下:

View Code

  四、MyEvaluator.cs 执行表达式或方法,返回结果的类。

相关代码如下:

MyEvaluator.cs
  五、关键技术点剖析

  1.不同的软件可能包含不同人员类型(如流程审批中可能需要组织机构中的部门经理,还可能需要角色中的计划员等)。

  解决方案:提供统一的接口(IPersonList),具体的应用程序实现接口,并在全局变量PersonnelModeList中注册接口实现类的实例。

  2.条件步骤的具体选择(如在满足条件一的情况下走步骤一,而在满足条件二的时候可能需要走步骤二)。

  解决方案:提供可行性表达式的方法,根据执行表达式的结果确定具体的步骤(如(10>@p?1:2)会根据传入的p的值确定是走步骤一还是走步骤二)。

  六、总结

  因并没有与具体的表单设计引擎相关联,流程引擎中必然存在许多不足的地方,比如,条件步骤的具体选择就存在很大的局限性,无法直接设置某个属性的值去做条件判断从而确定具体的步骤。

  由于笔者知识面的局限性,引擎中可能还存在笔者没有考虑到的因素,望读者们能与笔者共同发现引擎中的不足以及寻找最佳的解决方案。或者读者对现有的代码结构、解决方案等有好的意见均可与笔者沟通(联系方式见上)。

  注:相关源码会在下一篇的可视化流程设计中一并给出,有兴趣的读者请关注。

 

相关文章连接

  可视化流程设计——流程设计器演示(基于Silverlight)http://www.cnblogs.com/qidq/p/Workflow_Silverlight.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
什么是工作流?工作流有什么作用?怎样配置工作流程?
几种开源工作流引擎的简单比较
一文看懂开源工作流引擎 Flowable
可视化服务编排在金融APP中的实践
activiti学习笔记1
什么是工作流引擎?|
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服