通用流程设计

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值