开发一套通用流程引擎软件,在主软件可以通过简单的注册、引用,即可完成软件流程部门的设计开发。
1.通过EntityFramework的CodeFirst实现流程有关的数据库表的创建。
2.通过SilverLight实现流程的可视化操作。
一、Entities流程实体
定义流程相关的数据库实体。
1.WorkflowInitializer.cs 初始化数据库类,定义创建数据库时的默认数据。相关类定义如下:
2.WorkflowDB.cs 继承System.Data.Entity.DbContext 定义流程引擎数据库上下文类。相关类定义如下:
3.ModuleList.cs 模块类,主应用程序包含多个模块应用流程时,有此处区分具体模块需应用的具体流程。相关类定义如下:
4.WorkflowMain.cs 流程主表类,定义流程相关的属性。相关类定义如下:
5.WorkflowDetailed.cs 流程子表类,定义流程步骤的相关属性。相关类定义如下:
6.TaskList.cs 任务表,定义针对处理人的相关任务信息。相关类定义如下:
7.AnnexList.cs 附件表,针对任务处理时上传附件的需求。相关类定义如下:
二、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:T 17 { 18 return (T)Activator.CreateInstance<T2>(); 19 } 20 } 21 }
2.Enums.cs 定义相关的枚举。代码如下:
3. I*Operation.cs 对应数据库表的相关操作。代码如下:
4.IWorkflowOperation.cs 流程的总体操作。代码如下:
5.IPersonList.cs 具体应用程序需实现的权限相关的人员接口。代码如下:
6.PersonnelMode.cs 全局角色类型,通过单例模式实现对应用程序全局人员类型的管理。代码如下:
三、Concrete接口的实现
对接口的具体实现。
1. *Operation.cs对应数据库表的相关操作。代码如下:
2.WorkflowOperation.cs流程的总体操作。代码如下:
3.PersonPersonnelMode.cs 人员类型中,人员的实现实例类。代码如下:
四、MyEvaluator.cs 执行表达式或方法,返回结果的类。
相关代码如下:
1.不同的软件可能包含不同人员类型(如流程审批中可能需要组织机构中的部门经理,还可能需要角色中的计划员等)。
解决方案:提供统一的接口(IPersonList),具体的应用程序实现接口,并在全局变量PersonnelModeList中注册接口实现类的实例。
2.条件步骤的具体选择(如在满足条件一的情况下走步骤一,而在满足条件二的时候可能需要走步骤二)。
解决方案:提供可行性表达式的方法,根据执行表达式的结果确定具体的步骤(如(10>@p?1:2)会根据传入的p的值确定是走步骤一还是走步骤二)。
因并没有与具体的表单设计引擎相关联,流程引擎中必然存在许多不足的地方,比如,条件步骤的具体选择就存在很大的局限性,无法直接设置某个属性的值去做条件判断从而确定具体的步骤。
由于笔者知识面的局限性,引擎中可能还存在笔者没有考虑到的因素,望读者们能与笔者共同发现引擎中的不足以及寻找最佳的解决方案。或者读者对现有的代码结构、解决方案等有好的意见均可与笔者沟通(联系方式见上↑)。
注:相关源码会在下一篇的可视化流程设计中一并给出,有兴趣的读者请关注。
相关文章连接
可视化流程设计——流程设计器演示(基于Silverlight):http://www.cnblogs.com/qidq/p/Workflow_Silverlight.html