前言:本人在准备系统分析员考试中论文部分的习作,请大家打分(总分75分),并指出可取之处与不足之处,谢谢!
论面向对象技术在呼叫中心开发的应用
摘要:呼叫中心产品是当前应用的一个热点,通过该产品,客户可以足不出户的享受方便快捷的
语音与传真等服务。对企业来说,建立呼叫中心对于提高客户满意度,争取客户乃至增长利润都有
极大的意义。目前呼叫中心在各行各业特别是金融业得到了广泛的应用。本文从笔者参与的银行呼
叫中心项目开发的经历出发,讨论了采用面向对象技术的理由及过程。同时,讨论了面向对象技术
在开发中的应用,如:面向对象设计原则、UML技术、设计模式等,使设计的系统拥有较好的可重
用性、易维护性。
正文:
我所在的单位是把目标定位在金融领域开发IT应用的一家信息技术公司。随着金融电子化建
设的发展和商业银行之间市场竞争的加剧,各主要商业银行不断通过信息技术提供新的金融产品,
以期为客户提供更好的服务并且整合市场渠道。比如各银行纷纷推出呼叫中心,使客户能够足不出
户地享受7×24×365的服务。本人作为公司呼叫中心项目组的一名技术骨干,有幸参与了该产品的
研发、推广、升级。
选择面向对象技术的原因。呼叫中心通过公用电话网为客户提供语言与传真等服务,主要由语音
服务器(IVR)、传真服务器(Fax Server)、坐席端(CSR)等子系统组成。我们公司的第一代产
品主要采用结构化的方法进行分析、设计、编码。此产品在全国多家银行推广使用。由于客户的需求
不一样,我们的产品需要客户化,同时,由于客户需要的规模不同,语音卡可能采用不同的厂家的不
同系列产品,这样,随着应用的推广,结构化方法的弊端也逐渐显现出来。首先是模块之间的耦合性
太强,代码不好理解、维护。经常出现“牵一发而动全身”的情况,有时工程师进行维护的时候,局
部的改动也会影响到一大片程序。另外,模块复用性很差,在此背景下,公司组织技术骨干进行讨论,
以期找到一种理想的解决方案来改变这种局面。以往的开发经验使我感觉到面向对象技术比较适合于
此类应用系统的开发。于是我提出我的设想及初步方案,得到了大多数与会者的赞同。会后,我正式
写出了技术改进方案,并应用快速原型法作出了一个简单原型,向公司领导及其他技术人员演示了面
向对象开发的优点。技术改造建议书与原型得到了领导的赞许。为了降低风险,而且呼叫中心的各个
子系统相对独立且在架构上有很多相似之处,于是,我考虑可以利用呼叫中心的一个子系统传真服务
器作为试点进行开发,效果明显的话再考虑其他子系统的改造。在这个改造的过程中,我使用了多种
措施来达到预期目的:
1)面向对象设计原则的应用。在旧系统中,主要因为模块之间的耦合性太强,全局变量太多,Case
语句太多而引起系统的重用性、维护性差。要解决这个问题,我们采用了面相对象中封装的特性来实
现信息隐藏。通过抽象,把系统分解为一些相互通信的对象,这些对象向外隐藏实现细节,对象之间仅
仅知道对方的接口,这样,他们的耦合性大大降低,为复用提供了可能。在面向对象设计中有一个重要
的设计原则:OCP原则(The Open Closed Principle),就是说设计对象时,要使它易于扩充,但扩充
的前提是不修改已有代码。这在结构化编程中简直是不可思议,但我利用了面向对象的多态特性来实现
了这一原则。例如,这个子系统需要采用传真卡,而传真卡有数字卡与模拟卡,不同厂家提供的API也
可能不一样,在以往的结构化编程中,要么一种板卡一套程序,要么代码中充满了switch...case语句。
我们利用了多态的特性,抽象出板卡之间的共性作为基类,而具体采用的板卡从这个基类上派生出子类
即可。这样,不同的板卡,就是采用了不同的子类,维护性就大大增加了。
2)UML(Unified Modeling Language)的采用。就像建筑工程师需要画出建筑设计图一样,软件工
程师也需要一种建模工具,来进行设计、交流、写文档。UML作为面向对象建模语言的标准,成为我的
设计首选。不少软件工程师(包括以前的我)都有这样的坏习惯:一坐下来就是开始写代码,代码边写
边改,有时到快写完时才发现有严重的漏洞,从而导致质量、效率大打折扣。在UML中,我们可以通过
多种图,从不同的角度来描述我们要设计的系统,在画图的过程中,我的思路就变得清晰起来,对系统
的理解也就越深。这样就避免了重编码、轻设计的弊端。由于UML是建模标准,通过在项目组内、公司
内的推广学习,使开发人员之间的交流方式得到统一,也能使程序员准确地理解设计,避免二义性。在
这个项目中,我用Microsoft Visio2002画出了类图、序列图、活动图等,使我的设计思路逐渐清晰。
同时,这是公司第一个采用UML进行设计的项目,对公司的文档标准化进程也是一种有益的尝试。
3)设计模式的理解运用。设计模式是一些常见的设计问题的的优雅、巧妙的解决方案,通过“模仿”
设计模式,即使是面向对象设计的初学者,也可实现大师级的设计,从而拥有极好的灵活性、重用性。
在设计这个系统之前,我有幸拜读了Erich Gamma等四人的著作《设计模式》,从中得到的设计灵感以
及设计原则使我受益颇深。比如:传真服务器设计中,只允许有一个消息队列,为了避免意外,采用了
Singleton(单件)模式,优美地解决了这个问题。另外,采用了Template模式,实现了业务流程的定
制等。设计模式对促进项目组内的技术交流有很大的帮助,一句“在这里采用了Template模式”比画
出几个类图、交互图要有效许多。当然,前提是对方也知道Template模式。
这个技术改造项目历时一个多月,取得了理想的效果。改造后的系统运行在Unix上,采用C++实现,
系统架构很清晰,这可以从UML的类图与包图看出来。代码重用性强,后来的这套系统移植到WinNT平台,
除了跟Unix底层的机制有关的消息队列类、共享内存类要修改外,其他均实现了平滑移植。这个系统经
评审后,被认为成功的达到了预期目的,为其他子系统的改造提供了良好的基础。
面向对象技术的优越性明显,但它的要求也较高,它需要设计者要对面向对象的思想有较深入的理
解,否则很容易用结构化的编程思想来写面向对象的程序,这样不但达不到预期目的,反而弄巧成拙。