交易系统-业务脚本框架设计
1.设计目标
- 可维护性和扩展性好。
脚本框架结构清晰,能够很容易加入新的业务功能,或则修改 业务功能。
- 稳定安全性好。修改/添加新功能,对已有功能基本无影响。
- 脚本代码清晰,可读性好。
- 文件版本易于跟踪。
2.Lua脚本功能设计
2.1 总体方案
(1)LUA脚本是一个业务处理以及过程控制的脚本,所有的业务处理、过程的控制都由脚本来控制,通过插件动态库提供的接口调用,组成不同的业务逻辑。
(2)所有的业务功能需求,都通过总入口中的接口函数通过功能号,分发到各业务脚本中具体的功能函数处理。
2.2 Lua脚本详细设计
一个总入口脚本、若干个具体业务脚本和几个辅助脚本,具体结构框架如下:
Lua业务脚本与基础插件库和C++插件库的交互关系:
2.2.1 总入口脚本
它主要定义三个供插件调用的函数:
(1)一个用来初始化业务回调函数,在初始化脚本环境时候,由 插件调用。
(2)另外一个用来根据功能号来执行业务脚本各种业务功能。
(3)最后一个用来获取版本信息。
2.2.2各种业务功能脚本
(1)每个业务脚本内放置每种业务相关的功能函数,例如Stock 业务脚本放置与Stock相关的功能函数。
(2)每个业务脚本内提供一个接口函数来注册与此种业务相关的功能函数。
2.2.3其他辅助脚本
包括如下几个脚本:
- 一个字典脚本:提供字典转换功能。
- 一个配置脚本:放置与配置相关的数据。
- 一个更新相关的脚本:根据客户端的版本号,提供相关功能更新。
- 工具库脚本:提供一些工具函数。
另外,每个脚本还需提供一个查询脚本版本的功能的函数,供插 件调用。
2.2.4脚本编写规范
为了提高代码的可读性和可维护性,在编写每个脚本代码时,必 须遵循一定的规范和格式。包括函数和变量命名,以及注释等。
具体规范,请参见Lua业务脚本编写规范。
2.3 Lua业务脚本提供主要接口:
(1)初始化接口<脚本标识号>InitRequest
注册功能功能号对应的回调函数,在插件加载脚本时候被调用。
(2)请求处理函数<脚本标识号>SendAndRecv
根据传入的功能号,调用相应的功能回调函数。
(3) 版本查询函数<脚本标识号>LuaGetVersion
查询Lua脚本中个脚本文件的版本信息。
2.4 功能函数设计
2.4.1 处理逻辑和流程
Lua脚本主要根据功能号实现对应的业务功能。每个业务功能 包括如下列业务逻辑和流程。
(1)从客户端接收到的包中获取数据,并进行数据转化,组包发往 柜台或数据库。
(2)从柜台或数据库接收数据,并进行数据转换,组包发往客户端。
2.4.2 接口参数
总共三个参数:
(1)用户基本信息
(2)功能号
(3)解/封包 信息(传给柜台)
3.框架依赖
由于脚本的业务逻辑由调用C++插件动态库提供的接口实现,所以依赖于插件提供的接口。如果插件接口设计不合理,会带来如下不利影响:
(1)脚本编写很复杂,易出错且可读性差。
(2)运行效率低。