脚本与可执行程序的交互使用(一)

         最近在作一个IVR的流程编辑器,IVR是自动语音应答系统,完成功能就像我们拨打10086时听到的“欢迎致电中国移动,话费查询请按1,余额查询请按2。。。”之类的东东。以前这个程序大概是这样子的: 根据语音卡上插的电话线数量n,开启n个线程,每个线程对应一个话路通道,另有一个饲服线程,用作检测这n路电话的专用线程,每当一个电话来的时候,就进入相应的线程函数进行处理(刚才说到的10086的业务流程)。当然,核心的东西是线程中对语音卡的操纵,这部分由VC编写。另外,跟业务流程相关的那部分,每个用户的需求流程都不一样,但又有很多共同点,这种情况下我们每次都要修改程序中业务相关部分,然后编译。。。这部分每次修改虽然工作量也不算非常大,就是麻烦,变来变去,而且 同一个客户过两天又找过来说再改成另外一种样子,唉,简直是变形金刚 ^_^
         现在先进的IVR为了克服这个缺点,都是采用单独的流程编辑器的形式,即用个独立的流程编辑器,制作出业务相关的流程,IVR的程序不变,做到程序和业务分离。这样,原来的程序开发便成了流程的制作,先编辑器做出流程图(图形化界面,长的比较像工作流的编辑器),然后根据流程图生成一个中间文件,然后IVR在运行时解析这个文件,动态改变自己的流程执行,进而达到业务随时改变,程序一成不变的要求。当然,这个图形化的流程编辑器也比较灵活,像咱们编程环境中控件工具相似的,拖拽上几个节点,为每个节点设置上属性,再根据需求把这些节点用线连起来像程序流程图似的就构成了一个可变的程序。
        程序和业务分离,这是现代程序设计比较重要的一种技术,其目的就是为了方便以后的代码复用!
        当然,这样还存在一个问题,就是只有我流程编辑器中想到的业务才能表达。而且,即使有相应的功能,可能每个功能的操作还存在些差异,比如都是操作数据库,是增删改还是查?操作的表和字段都不同,没法一概而论。为了解决这个问题,就需要把编辑器的功能扩充,让它自己可以编程!那么如何才能配合另外那个IVR的程序执行的,要知道,如果再编程,那可是两个进程,而且还是要面临再编译的问题。这时候脚本的作用就发挥了!
        像c++、java都是静态语言,都需要编译为二进制或中间语言,不可能再与代码级的程序交互。而vbs、js等脚本都是动态语言,他们不需要编译,可以原封不动的将代码展现给我们。正因为如此,我们应该用脚本去写一些跟业务相关的经常改变的操作,而核心的程序依然用c++写保持不变。前面说过,有了方便的流程编辑器,流程的骨架我们可以很容易构造出,剩下的就是个别需要扩展的地方,那么就是这里,我们加入自定义的操作去弥补,而这些操作,就是用脚本去完成。
       说到这里,思路大概清楚了,而我们现在所关系的就是怎么把程序跟业务这两块,一个由c++写的,一个由脚本写的,结合在一起同时使用。就是程序从c++的exe执行,运行到业务部分跳到脚本执行,运行完再回到exe继续执行,而且中间过程也需要数据的交互传输。这似乎成个很大的难题!
       经过一天的查找资料,终于发现问题的解决办法,而回想这个编程处理过程,其实对很多软件程序跟业务的分离都很有用处,一个好的编辑器+脚本作补充+带解析引擎的程序。在下篇文章中,我将详细介绍脚本和如何使其与可执行程序交互调用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值