惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 东成西就

重灾面前,我们有力量面对一切困难! 试一下 使用CAB中EventBroker碰到困难,暂记于此! 在.NET中动态编译与执行脚本文件 db4o学习笔记(五)、处理结构化对象上 db4o学习笔记(四)、db4o查询详解续 db4o学习笔记(三)、db4o查询详解 db4o学习笔记(二)、第一次亲密接触 db4o学习笔记(一)、db4o概览 LightweightCTI架构设计(5) LightweightCTI架构设计(4) LightweightCTI架构设计(3) LightweightCTI架构设计(1) LightweightCTI开发实录(5)板卡适配器概述 LightweightCTI开发实录(4)系统如何工作 LightweightCTI开发实录(3)分析之前 系分考试准备的论文(6):论系统设计中对用户需求的把握 LightweightCTI开发实录(2)项目计划 LightweightCTI开发实录(1) 缘由
LightweightCTI架构设计(2)
东成西就 · 2006-08-30 · via 博客园 - 东成西就

二、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 系统内部组织结构)

  由插件树构成的系统有点类似于操作系统中的目录树。插件树中有两种不同的对象:节点与路径。插件树中的节点是包含某种特定功能的模块,由根节点加上路径构成。应用系统的功能就由插入到系统中的节点来定义,而路径则是由根节点到子节点的边线构成。如AddInRoot\SubPath1\SubNode1\SubPath2,这非常像操作系统中的文件/目录路径,节点则是包含行为的特殊路径。通过此种方式来划分软件结构的优点在此处就不多说啦。由于时间及精力的问题本部分的实现部分正在进行中。下面我们将重点介绍其中一个扩展子系统-板卡适配器层方面的内容,这也是大家最为关心的部分。