工作流:第一次发版,设计总结
编程技术  /  houtizong 发布于 3年前   146
实现手段近似,意图不同
/// <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);
}
}
虽说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);
}
//……
//…
}
流程设计器和引擎和流程监控工具等看到的只是系统内部定义的类似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>
流程设计器和流程监控工具和应用等首先看到的只是流程的描述,选中某个流程后才会去获得真正的流程定义
待改进之处极多,优先的几个:
开源了目前使用的XPDL解析器,希望能得到反馈
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接