LightweightCTI架构设计(2)
二、LightweightCTI体系结构
在深入介绍LightweightCTI之前让我们首先大概了解一下其体系结构,这样有助于我们理解其工作原理、实现方式,特别是其中应用的一些设计模式。LightweightCTI的首要设计目标是为各种语音卡接口的实现提供一套支持框架,而非前面提到的为语音应用开发提供可用的实现框架(当然我们也会实现一些特定厂商平台的相关接口)。所以,我们将重点讨论包含于LightweightCTI中的基础接口,并阐述它们是如何相互协作一起完成支持语音相关应用开发任务的。
2.1、系统组件容器
它是一个可扩展的基础结构,通过它可以将各种不同的功能扩展组件有机的粘合在一起,并使这看起来像更像是一个有机的整体,所以说它为LightweightCTI的粘合剂一点也不为过。系统组件容器具体的表现为,系统插件管理器及其对应的插件接口,由它们共同组成系统的核心层,并负责扩展组件、公共服务、全局属性的注册与管理工作。
2.2、系统扩展组件
扩展组件完成具体的功能,并为其上层组件提供服务。通过将不同的扩展组件注册到容器中即可组装成不同的应用系统,同时利用它也可以对应用系统进行分割,为系统的团队开发、调试、版本控制及部署提供方便。
2.3、全局属性、公共服务
为完成某个任务系统中的不同组件可能都需要一组公共的服务及全局属性,而它们则是专门负责这方面工作的。在系统的基础结构中提供了一组预定义的公共服务如文件读取、配置信息的读写等,当然你也可以针对自己的应用编写并注册相关的服务。
为此,LightweightCTI是建立在以上三种类型的组件所构成的微核心系统之上,具体的功能则由插入到内核上的一个或多个扩展组件构成。
系统的体系结构如下图所示:
|
Global Properties |
Resources |
Utilities |
Extensible Module Tree |
Basic GUI Layer |
Add-ins |
Add-ins |
Add-ins |
Program Core |
(图2.1 LightweightCTI体系结构图)
为保证系统的扩展性,采用插件树的形式来组织注册到组件容器(插件管理器)中的扩展组件。插件树是一种树形结构,在系统中管理和维护所有的插件,并对每个插件提供的功能进行描述。插件树通过插件定义文件(.addin)的一种XML文件加载所有的插件,在此我们不想就为什么采用XML文件来定义插件而展开讨论,关于它的优点已有无数的文章进行了详尽的阐述。而插件则将采用DLL或其它形式(如Delph/C++Builder中的Package)进行封装。
加载插件后的系统内部组织结构如下图所示:
Addin4 |
AddIn Tree |
Addin1 |
Addin3 |
Addin2 |
Addin5 |
(图2.2 系统内部组织结构)