欢迎来到天天文库
浏览记录
ID:9123555
大小:70.47 KB
页数:7页
时间:2018-04-18
《按需构造的工作流系统组织模型》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、按需构造的工作流系统组织模型工作流系统作为基础组件应该能够与应用程序灵活集成,在设计工作流系统中的组织模型架构时应重点考虑与应用系统的集成方式?设计基于工厂模式与反射技术的组件按需加载模型,降低软件系统间的耦合?实现工作流组织模型与不同类型的应用程序的良好集成?基于该技术实现的项目管理系统在多个企业得到成功应版权和著作权归原作者所右,如存不愿意被的情况,己的信息,.xzbu.8/view-8772030.关键词:工作流;工厂模式;反射;耦合;按需加载;:TP311:A1引言随着工作流技术的快速发展与逐步成熟,越来越多的应用系统将其作为必需的基础部件?为了
2、将工作流集成到应用系统中,许多公司都幵发了自己的工作流产品?但是在幵发过程中,一个需要重点解决的问题是如何实现工作流管理系统与应用系统的灵活集成?由于工作流管理系统是一个公共部件,因此,它应该能够很方便地与各种应用集成而又不破坏双方的设计架构,这实际上是如何降低工作流管理系统与应用系统的耦合度的问题?在J2EE平台下,有几种技术可以很好地解决这个问题,如Spring框架?Avalon框架?PicoContainer轻量级容器等[6]?但在.NET平台下,却没有相应的框架产品?另外,出于对性能的考虑,应用程序中没有采用上述任何框架,因而需要设计一种足够灵活
3、的组件集成模型?2耦合问题的分析根据WfMC的定义,一个完整的工作流模型是由过程模型?组织模型和资源模型构成的一个有机整体[4]?实施基于工作流管理系统的应用时一个非常重要的任务就是将应用程序中的组织模型与工作流中的组织模型集成?但是,由于应用程序和工作流产品是由不同团队开发的,模型上的差异使得集成相当困难?通常采用的方式是在应用程序中利用工作流提供的接口将组织数据写入工作流系统中,以实现流程的工作指派?但这种方式导致组织数据在两个数据库中重复存放,需要考虑数据的完整性和一致性管理,非常繁琐?如图1所示?重复意味着耦合[1],这种数据库的重复造成了两个系
4、统间不必要的耦合,它势必要求在两个数据库之间保持一致,而完成这项工作是非常网难的?一个自然的想法是去掉工作流环境中的组织数据库而采用应用环境中的组织数据库作为统一的组织数据存储环境,这样就解决了数据的一致性问题?但是,在这种方式下,工作流中的组织模型组件需要访问应用环境的组织模型组件,从而导致工作流组件对应用程序组件的依赖,这显然是不行的?这是因为不同的应用环境可能具有不同的组织模型和接口,开发工作流系统时不可能预知将和哪个应用程序集成,因而也就无法预知应用程序的组织模型的接U和组件?即使通过制定统一的组织模型接口标准,还是需要在工作流组织模型中实例化应
5、用系统的组织模型组件?见图2?这实际上是一个如何延缓接n实现的问题,即在开发工作流组件时只依赖共同的组织模型接口编程,而组织模型的实例化则在集成具体应用吋完成?3按需加载模型在.NET平台下基于工厂模式和反射技术的按需加载模型提供了对这个问题的一个解决方案?思路是:调用者通过工厂对象来实例化被调用组件,但由于被调用组件的可变性,不能在工厂代码中固化实例化具体组件的代码,因此我们借助于反射技术中组件的动态装载技术,通过配置文件设置要实例化的组件,再由工厂类读取配置,根据配置决定具体实例化哪个组件,这样就实现Y组件的按需加载?计算技术与自动化2007年6月第
6、26卷第2期方俊等:按需构造的工作流系统组织模型3.1工厂模式在传统的编程方式中,控制权是由调用者掌握,即调用谁是由调用者决定的,因此,在调用者代码中就包含了创建被调用者实例的代码,这样就构成了调用者对被调用者的依赖?见下面的代码(以下代码都采用C#编写):在类A的代码中定义了类B的引用变景,这种依赖是在编译期引入的(前期绑定)?根据文献[3],这种依赖是造成软件僵化(Rigidity)?脆弱(Fragility)的主要原因?DIP原则指出应该在调用者和被调用者间加入抽象接口,使调用者和被调用者都依赖于抽象接口,这样,只要接门保持不变,被调用者的改变不会
7、影响调用者,从而解决了软件的僵化脆弱问题?见图3:但是,引入抽象接口并没有将调用者和被调用者完全解耦,只是将两者间的依赖由前期绑定改成了后期绑定?在调用者代码中还存在直接创建被调用者实例的代码?见下面代码:假设IB是一个接口,类B实现了接门IB?这种A和B的依赖关系导致了对组件B的调用的不可变性,如果存在多个实现了IB接U的类可以完成类似工作,在这种方式下就没有办法根据需要有选择地调用所需的类?GoF的《设计模式》中给出的工厂模式很好地解决了这个问题?简单工厂模式[5]引入一个工厂类,负责根据需要来创建被调用者的实例,调用者通过工厂类获得调用者实例?这样
8、,在调用者代码中就没右对被调用者的直接引用,从而实现了调用者和被调用者间的真正解
此文档下载收益归作者所有