1、第 1 节 前言目前通达信网上交易 V5.X 客户端存在 5 大缺陷:序号 问题说明 解决方法1 紧耦合客户端程序模块化程度不足,内部逻辑复杂,代码可读性差。在响应业务快速变化的定制开发需求时导致工作量大,开发周期长等问题2 底层抽象不够大量采用全局变量控制业务逻辑,导致程序维护与版本管理均较难于把握和控制。按照 Observer(观察者)设计模式重新编写客户端程序适当增加代码注释3 不支持双工增加异步双工特性4 安全性弱虽然已经采用了用户登陆对话框防病毒、防木马、防后门钩子等技术处理,但是客户端程序整体仍然能够通过“脱壳”程序编写欺骗代码,在行情登陆时候可绕过用户验证直接登陆;通过同样的技术
2、,能够跳过用户登陆验证,输入非法代码登陆交易客户端,获取交易客户端功能界面,但是由于未进行后台验证,无法进行正常委托交易;交易中心检查客户端的逻辑顺序,例如必须存在正确登陆才能进行其他业务类请求,否则记录地址备查,对于特定版本首先违背业务流程的一定是破解者本身,对于这些用户我们将进行封锁和警告,警告无效则请求警方介入处理。接口实施用户输入信息合法性检查,以避免冲击后台客户端加强破解的防范措施,这个任务相对而言比较长远,目前已经完成基本措施建立更加及时的集中跟踪报警机制及破解跟踪响应机制Level 2 行情服务和交易中心进行用户联合验证5 版 程序通用框架代码与客户的个性化代码重叠,导 严格划分
3、框架代码与业务功能代码的版本号,使用 TFS第 2 页 共 50 页本管理混乱致客户端版本混乱,在长期的版本升级与维护过程中,框架代码与业务代码纠结不清,版本升级已成为系统风险最大的环节。系统进行版本规范化管理第 3 页 共 50 页第 2 节 V6 技术总介2.1 设计思想财富趋势网上交易 V6(内部版本标识 V6)是深圳财富趋势科技有限公司基于原有网上交易 5.X 系列产品(内部版本 V5,外部发布版本6.X-8.X 等)重新设计后形成的全新产品。财富趋势网上交易 V6 的主要改进方向在于客户端的模块化和高度抽象化,主要设计思想在于:网上交易 V6 强化客户端体系结构的层次性直达代码维护混
4、乱和管理缺乏的根源,实现模块化和组件化,从体系上提高代码的可靠性,例如:分离出基础类、抽象出通讯底层等等。弱化各模块之间的关联 解决模块之间相互牵扯和影响的问题,模块之间通过接口抽象和接口标准化,减少或规范化相互之间耦合,最大限度的减少模块之间的关联性(这些关联包括界面模块和界面模块之间、界面模块和全局状态之间、界面模块和通讯底层之间的关联) ,规范后每个模块意识不到其他模块的存在和,更谈不上相互牵扯和影响。提高个性化能力 一方面大幅度提高客户端定制的弹性,一方面大幅度减少定制时相互关联引发的升级风险。简化业务逻辑 通过大幅度的抽象,使得复杂的业务逻辑标准化、透明化,减少业务和实际通讯的勾连,
5、从而简化业务代码和界面代码的编写。主要设计思想提高透明度和开放性 基于有限的封装,向部分合作客户提高业务代码的开放性和透明度,和针对交易接口的抽象一样,系统提供单独针对业务层的抽象,隔离复杂的系统逻辑,剥离出清晰简单的业务逻辑。第 4 页 共 50 页2.2 模块组织财富趋势网上交易 V6(后简称 V6)设计中将系统划分为:基础层、协议层(通讯层)、业务模块层,所有元素通过架构层进行控制和管理,如下图:业务界面层 业务界面层 业务界面层基础层 ( C L I B H L P R .D L L )通讯层 ( T C A P I .D L L )架构层 ( E T R A D E .D L L )
6、外壳程序 ( S H E L L .E X E )业务界面层各层详细描述如下表所示:V6 模块组织 描述外壳程序(SHELL.EXE)外壳程序可以是行情主程序(TDXW.EXE),也可以是单独的主程序(ETRADE.EXE),主程序承担 DLL 的装载工作以及开辟工作区域,不承担主要的业务功能调用,也不承担任何细致的管理工作。若外壳程序需要调用业务,可以采用两种途径,分别为 RAW 模式和 ADVANCE 模式:可直接通过架构层(ETRADE.DLL) 查询到 TCAPI.DLL 的工作实例,直接发起调用,不需要通过架构层处理,这种方式第 5 页 共 50 页被称为 RAW 模式,例如闪电下单
7、功能和盘面下单功能即可通过当前途径实现,RAW 模式下,调用者需要和 TCAPI发生交互,需要理解业务本身,但具有更强的界面控制能力。若外壳程序需要调用界面,可直接通过 ETRADE.DLL 调用到对应的业务界面层界面,通过统一的接口和业务界面层进行交互处理,这种方式被称为 ADVANCE 模式,闪电下单功能和闪电手功能可用过当前模式实现,这种模式下业务逻辑由实际的业务界面层来完成,界面形式由业务界面层规定,定制性相对不如 RAW 模式,但调用者不需要理解业务,只需要了解界面的外部引用入参即可。架构层(ETRADE.DLL)系统架构层承担协调人的角色,承担如下工作:向 SHELL.EXE 提供
8、接口查询和交互接口(仅在必要的情况下)向下依赖于基础层,同时管理通讯层和业务界面层为界面业务层提供对象查询等等支持性工作提供跨界面调用的指令通道。业务层 业务层主要承担实际业务和界面的处理。业务层可以向架构层查询各种接口信息,其中最重要的为客户实例句柄以及配置存储对象句柄。业务层可以向架构层查询各种系统配置信息。业务层可根据客户登录实例句柄调用通讯层向后台发起请求,这里存在两种调用模式:异步双工模式和异步单工模式。通讯层 通讯层主要承担实际通讯处理,通讯层除完成到交易中心异步全双工模式的封装外,还提供自动策略交易功能(本地数据缓存) ,并且提供委托单跟踪功能,支持数据订阅和推送等机构版功能。业
9、务层构建于通讯层上,对实际通讯过程,登录逻辑、实际业务通讯处理、数据分页、数据缓存等全透明。基础层 基础层完成财富趋势基础库的建设,基础库包括四大主要部分:SafeVCRT 类库、 ClibHlpr 类库(含派生库簇) 、GuiHlpr 类库(老版本 MFC 扩展库)、MfcHlpr(新版本 MFC 扩展库) 。业务界面层组织 功能包功能实现功能重载通讯交互框架交互功能交叉引用第 6 页 共 50 页2.3 架构模块简介2.3.1 架构模块的基本作用架构模块管理全部系统模块,其中包括通讯层模块(TCAPI.DLL)以及全部的业务功能模块。组织系统的初始化,承担系统配置、缓存数据、本地配置、用户
10、私有敏感数据和配置的统一加密存储。负责管理客户账号列表以及全部客户连接实例。基本作用组织界面布局,其中包括功能导航、工具条、主窗口区、选项对话框、托盘窗口区等等。2.3.2 架构模块的基本结构管理模块的内部结构:第 7 页 共 50 页系统配置本地配置 缓存数据 敏感数据客户实例账号列表T C A P I架构模块本地 I O功能埠功能包 功能包功能功能 功能 功能通讯埠界面控制单元导航工具栏 选项 功能窗口架构模块通过界面控制单元完成界面布局和处理,界面元素主要包括三大区域:主功能区、设置功能区、浮动功能区。主功能区主要包括导航栏、工具栏、功能窗口,其中功能窗口包括主功能视图和弹出功能视图。如
11、下图:第 8 页 共 50 页主窗口主窗口股票功能买入卖出市价买入市价卖出功能窗口 ( 主视图 )工具栏导航功 能 窗 口 ( 弹 出 视 图 )功 能 窗 口 ( 弹 出 视 图 )取消确认功能窗口 ( 弹出视图 )设置功能区主要由设置页构成。设 置 页设 置 页设置 1 设置 2 设置 3取消确认设置视图浮动功能区为系统的第二功能区,用于显示各账号的最新状态。第 9 页 共 50 页工具窗口工具窗口顶级功能窗口功能 1 功能 2 功能 32.4 架构模块的子模块2.5 传统通讯模式传统通讯模式的主要特点是在半双工,即在完成一个请求和应答前,通讯上不能再次发起请求,务必等待上一请求完毕后,服务器在处理上采用半双工方式,即每路连接仅仅保持一个缓冲区,且不保障客户端发送的时序。半双工方式在通讯上可以采用同步和异步模式,采用同步模式时,通讯全过程和等待应答数据全过程会阻塞发起线程,采用异步模式时,通讯和数据应答的等待在单独的线程中完成,通讯全过程和等待应答数据全过程不会阻塞发起线程。半双工同步模式的时序如下图所示: 第 10 页 共 50 页数据发送数据接收数据处理完成 ?否是请求完成功能请求通道繁忙 ?否等待空闲是半双工异步模式的时序如下图所示: