实现手段近似,意图不同
/// <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>
待改进之处极多,优先的几个:
微内核:将引擎重构为一个简单的内核与围绕着内核的一组适配器 分离调度系统与信息系统:查询时应不需要引擎的参与,引擎负责流程调度,信息系统应承担的工作需剥离开来,提高性能 提供控制台:改变手工修改配置文件、注册适配器的局面开源了目前使用的XPDL解析器,希望能得到反馈
http://cosoft.org.cn/projects/xpdlparser
本文地址:http://com.8s8s.com/it/it35240.htm