- 浏览: 117743 次
- 来自: ...
文章分类
最新评论
整体
- 面向接口:消息系统,持久系统等,其实现都是可替换的,主干代码对实际的消息系统或持久系统等一无所知
- 组件复用:Visio对象及Visio模具的使用目前来看取得了极好的效果,极大缩短开发周期、增强功能、并自动将数据与视图进行了相当程度的分离,并且比Jawe等设计器漂亮多了
- 基于SOA:平台所有接口都是通过WebService提供的,提高了复用和跨平台能力;实际上,平台是.Net开发的,而目前支撑的几个应用则是J2EE的
- 服务网关/接口:平台核心功能以类库的形式提供,所有暴露出的接口都是薄薄的一层WebService包装(服务接口);对接口的访问也以类库的形式提供,隐藏了对WebService的调用(服务网关)
- 遵循标准:对WfMC的遵循使开发组少走了不少弯路,因标准即使不是最佳方案,亦已对常见问题深思熟虑,对缺少业务专家的开发组来说有相当的指导作用;并且开源软件提供了参考实现,与开源软件的互操作验证了产品的正确性
模块
- 通用查询接口:Decorate/Composite
实现手段近似,意图不同
/// <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>
- 流程描述与流程定义:Item and Item Description
流程设计器和流程监控工具和应用等首先看到的只是流程的描述,选中某个流程后才会去获得真正的流程定义
待改进之处极多,优先的几个:
- 微内核:将引擎重构为一个简单的内核与围绕着内核的一组适配器
- 分离调度系统与信息系统:查询时应不需要引擎的参与,引擎负责流程调度,信息系统应承担的工作需剥离开来,提高性能
- 提供控制台:改变手工修改配置文件、注册适配器的局面
- 统一界面框架设计:改变缺少界面规范或模板、界面风格不统一、代码结构不统一的现状
- 剥离对第三方商业产品的依赖:设计器的视图部分增加一个抽象层,隔离Visio组件,毕竟有成本问题
- 要不要语言独立?J2EE平台和.Net平台的相似,Java和C#的相似,提供了若干诱惑,有了一套主干代码,两套平台适配器的想法,并且公司目前的项目即存在对J2EE工作流平台的需求;肯定已经有很多成功项目这样做了,问题在于我们的资源,再讨论一下
开源了目前使用的XPDL解析器,希望能得到反馈
http://cosoft.org.cn/projects/xpdlparser
发表评论
-
The Object Primer
2004-12-11 11:21 5841,书名 被翻译成“ ... -
错误处理规范
2004-12-11 16:47 755错误处理规范 〇、概念澄清 概念 解释 错误 ... -
Java,误解为何如此之深
2005-08-24 13:50 592前几天被电话面试,问J ... -
Java:画蛇添足的编码规范
2005-09-02 13:13 606前几天公司培训编码规范: 第n条: ... -
synchronized : 规则, 推论与实践
2007-07-23 22:32 46314.3.Synchronization. Rule ... -
交互设计: 股市帮凶
2008-05-04 21:30 642同事 Y 在线操作股票时, 把"买入"点成 ... -
交互设计: 火车上的厕所
2008-05-26 17:17 606有人在动车组的厕所前等了很久, 直到乘务员路过说厕所是被锁住了 ... -
设计原则与模式: 案例介绍--CppUnit
2008-06-01 20:15 610设计原则与模式: 案例介绍--CppUnit CppUnit ... -
工作流:形参,实参,相关数据
2004-12-11 11:40 670关于形参,实参,相关数据 一、形参(FormalParame ... -
工作流:第一次发版,过程总结
2004-12-11 11:42 708交流 即时讨论:小组成员咫尺之遥,有问题立即提出并解决 ... -
Beyond Workflow : An Introduction to Vitria BusinessWare
2005-09-26 10:13 802一、简介 Busines ... -
Vitria BusinessWare: 存储与访问安全
2006-03-26 15:45 745事实上,BusinessWare使用LDAP做为存储机制和 ... -
Vitria BusinessWare: 平台与软件总线
2006-04-01 12:59 837经过一段时间的使用 ... -
Vitria BusinessWare: Web Services
2006-04-01 14:30 739BusinessWare的Web Services ... -
Web Services:自洽,编码,交换模型
2006-04-01 16:02 6721, 自洽 以前曾经写过: 目前WebServi ... -
Web Services:WSDL 1.1 规范中的几个错误
2006-04-01 16:40 718读完了WSDL 1.1的规范,令人惊讶的是发现似乎例子中有几个 ... -
C++/CLI:被忽视的集成技术
2006-05-17 20:02 753十几行代码,就使一个重要的旧系统组件,完全融入了基于.Ne ... -
AJP/JK:异构Web平台的集成技术
2006-05-25 21:44 706Tomcat Connector 可以将Tomcat ... -
Vitria BusinessWare: 事件与端口
2006-05-27 17:24 655Event BusinessWare是一个事件驱动的系统 ... -
WS-Security Interoperability Issues: WebSphere, JBoss, Axis and .Net
2006-08-31 22:46 836检验了一下WS-Security的互操作情况,涉及到 ...
相关推荐
Activiti作为一款开源的工作流引擎,其强大的流程定义能力以及良好的扩展性使其成为了很多企业的首选。 本文将详细介绍如何在前后端分离的项目中引入Activiti工作流引擎,并结合具体的步骤和注意事项,帮助开发者...
- 在弹出的列表中选择“活动(Activity)”,为工作流添加第一个任务节点。 - 例如,可以定义一个名为“创建休假申请”的任务节点,使用系统预设的标准任务“TS70007918”。 ###### 2.4 设置代理人(Agent) - 在“代理...
### SharePoint 2007 多级审批工作流 Sequential 版 #### 一、引言 在企业级应用中,工作流(Workflow)是确保业务流程自动化和规范化的关键环节。SharePoint Server 2007 作为一种强大的企业级协作平台,提供了...
工作流的启动是整个流程管理的第一步,它标志着一个特定业务流程的开始。成信工作流引擎采用了单一的启动节点模型来确保流程的唯一性和可控性。 **1.1.1 启动节点(SingleStartNode)** 启动节点作为工作流的第一个...
在第一章中,习题涉及到工作流的基本构造,包括顺序、选择、并行和迭代。顺序是指任务按照预设的顺序依次执行;选择则是根据特定条件仅执行其中一个任务;并行任务可以同时进行,不依赖特定顺序;而迭代则指任务可能...
在软件详细设计中,软件体系结构模型扮演着至关...总结“4+1”视图,它为全面理解软件系统提供了多角度的视角,帮助设计者确保系统在功能、开发、执行和部署等多个层面的协调一致,从而提高软件质量并降低维护成本。
1. 先一次,后二次:当图中有一次接线和二次接线同时存在时,应先看一次部分,弄清是什么设备和工作性质,再看对一次部分起监控作用的二次部分。 2. 先交流,后直流:当图中有交流和直流两种回路同时存在时,应先看...
3DES是基于DES(Data Encryption Standard)的增强版,通过三次应用DES算法以增加安全性。然而,由于其较长的加密时间,3DES在现代应用中通常被更高效的AES所替代。 在FPGA实现这些算法时,设计师需要考虑功耗、...
第一次拉深尺寸的计算则依据零件的几何形状和拉深工艺特性,以确保拉深过程中材料的均匀流动。拉深件的工艺分析和确定拉深次数是为了避免过度变形导致的裂纹或起皱。工艺方案的选择是基于工艺可行性和经济性的考虑。...
以上是对《C程序设计语言 第二版 英文版 pdf(非扫描版)》中所包含的知识点的总结。这本书是一份完整的C语言学习资源,适合初学者和有经验的程序员使用。通过阅读本书,读者不仅能够掌握C语言的基础知识,还能够...
在这个实验报告中,我们重点关注了寄存器及数据输出的相关知识,这是理解计算机工作原理的关键环节。 首先,寄存器是计算机内存中非常小且快速的存储单元,它们在数据处理和指令执行中扮演着至关重要的角色。在COP...
《Thingking in Java》(第一版中文)是这样描述设计模式的:他在由 Gamma, Helm 和 Johnson Vlissides 简称 Gang of Four(四人 帮),缩写 GoF 编著的《Design Patterns》一书中被定义成一个“里程碑”。事实上,那本书...
总结来说,《机电控制工程基础》这门课程主要涵盖了自控系统的概念、基本控制方式、系统性能要求、反馈控制原理、数学建模方法以及传递函数的计算,这些都是理解和设计自动化系统的关键知识点。通过学习这些内容,...
【四川大学操作系统课程设计】的第二次实验主要围绕Shell编程基础展开,旨在让学生深入理解Linux操作系统中的核心概念,如C语言开发工具的使用、进程管理和通信。实验内容包括一系列基于系统调用的编程实践,如fork...
2. **创意封面设计**:封面是PPT的第一印象,此模板中的创意封面利用线条和圆圈元素,创造出引人入胜的视觉效果,同时提供了一个空白区域,供使用者添加自己的主题或个人信息,使得每个报告都能个性化定制。...
- 型模架是模具的基础结构,PPT中展示了不同阶段型模架的状态,包括合模、第一次和第二次开模以及顶出过程,这有助于理解注塑模具的工作流程。 7. 设计考虑: - 在设计三板模时,必须充分考虑模具的耐用性、生产...
其设计目标是“一次编写,到处运行”,这得益于Java虚拟机(JVM)的存在,它允许Java程序在任何支持JVM的设备上运行。 Java语言的特点包括: 1. **面向对象**:Java是一种面向对象的语言,支持类、对象、接口等...
标题与描述中的“超酷的流水灯程序,间隔300ms先奇数亮再偶数亮”指...它不仅展示了微控制器的基本操作,如I/O口控制和定时器设置,还体现了编程中的控制流设计,对学习者理解和掌握微控制器的应用具有重要的教育价值。