《TUXEDO服务设计和编码规范-融金教育》由会员分享,可在线阅读,更多相关《TUXEDO服务设计和编码规范-融金教育(46页珍藏版)》请在金锄头文库上搜索。
1、TUXEDO服务设计和服务设计和编码规范编码规范-融金教育融金教育www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范11.1概述1.2文件体系结构1.3源文件结构1.4TUXEDO服务程序组成1.5文件命名规范1.6TUXEDO服务命名规范1.7编码规则www.si-04-Sep-24概概 述述 u制定编码规范的最主要的目的是为了对产出代码的长期维制定编码规范的最主要的目的是为了对产出代码的长期维护。通常负责维护代码的人大多都不是开发者本人,如果护。通常负责维护代码的人大多都不是开发者本人,如果有一个统一的代码格式以及说明就可以减少混淆提高理解有一个统一的代码格式
2、以及说明就可以减少混淆提高理解速度。因此,下列的编码规范是基于良好的编码习惯和可速度。因此,下列的编码规范是基于良好的编码习惯和可读性的原则来制定的。读性的原则来制定的。uTUXEDO服务是在服务是在UNIX C&C+或或UNIX PRO*C&C+的的开发环境设计和开发,对于文件排版、变量命名规范、语开发环境设计和开发,对于文件排版、变量命名规范、语句编写规范等不再给出,该部分内容请参考句编写规范等不再给出,该部分内容请参考www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范11.1概述1.2文件体系结构1.3源文件结构1.4TUXEDO服务程序组成1.5文件命名规
3、范1.6TUXEDO服务命名规范1.7编码规则www.si-04-Sep-24文件体系结构文件体系结构uRun /* 开发环境根目录开发环境根目录 */u| - cfg /* 配置文件目录配置文件目录 存放存放TUXDEO环境参数文件环境参数文件 */u /* 数据库登录参数文件和其它参数文件数据库登录参数文件和其它参数文件 */u| - include /*头文件目录头文件目录 */u| - shell /* shell脚本文件目录脚本文件目录 */u| - bin /* 可执行文件目录可执行文件目录 */u| - lib /* 静态库文件目录静态库文件目录 */u| - log /*日志文
4、件目录日志文件目录*/u| - public /*公共功能文件目录公共功能文件目录 */u| - | - bin /*可运行程序可运行程序 */u| - | - server /* TUXDEO服务端公共功能源代码服务端公共功能源代码*/u| - | - client /* TUXDEO客户端公共功能源代码客户端公共功能源代码 */u| - ()/* 应用程序目录应用程序目录 */u www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范11.1概述1.2文件体系结构1.3源文件结构1.4TUXEDO服务程序组成1.5文件命名规范1.6TUXEDO服务命名规范1.7编
5、码规则www.si-04-Sep-24源文件结构uC、pc、cpp文件都在文件头加入文件注释。文件都在文件头加入文件注释。uH头文件结构如下:头文件结构如下:u#ifndef_DATA_DEF_H_u#define_DATA_DEF_H_u#inlcude u/*incluede区*/u#define MM 30u/* 宏定义区 */u/* 结构、类、变量等定义区 */u#endif www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范11.1概述1.2文件体系结构1.3源文件结构1.4TUXEDO服务程序组成1.5文件命名规范1.6TUXEDO服务命名规范1.7编
6、码规则www.si-04-Sep-24TUXEDO服务程序组成* 业务处理程序* TUXEDO服务程序* 公共程序文件www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范11.1概述1.2文件体系结构1.3源文件结构1.4TUXEDO服务程序组成1.5文件命名规范1.6TUXEDO服务命名规范1.7编码规则www.si-04-Sep-24文件命名规范u业务处理文件业务处理文件uTUXEDO服务文件服务文件u头文件命名规范头文件命名规范www.si-04-Sep-24业务处理文件命名规范业务处理文件命名规范u文件名称模板文件名称模板: cXY.Y.cpu c - 文件
7、名第一个字符,为固定字符文件名第一个字符,为固定字符c(Component)u X - 文件归属的子系统编号文件归属的子系统编号u Y.Y - 功能缩写,建议不超过功能缩写,建议不超过20个字符个字符u.cp - pro*c文件后缀文件后缀u文件名称举例:文件名称举例:cxCustInfo.cpwww.si-04-Sep-24TUXEDO服务文件命名规范服务文件命名规范u文件名称模板:文件名称模板:RXYY.cpu名称模板说明:名称模板说明:u R - 文件名第一个字符,为固定字符文件名第一个字符,为固定字符R()u 每个文件定义一个或多个每个文件定义一个或多个TUXEDO服务,组成一个服服务
8、,组成一个服务组务组u X - 文件归属的子系统编号文件归属的子系统编号u Y.Y - 功能缩写,建议不超过功能缩写,建议不超过20个字符个字符u .cp - pro*c文件后缀文件后缀u 即使程序文件不包括对数据库操作,为了统一风格,即使程序文件不包括对数据库操作,为了统一风格,建议设计为建议设计为*.cp文件文件u文件名称举例:文件名称举例:RxGetFMCode.cpwww.si-04-Sep-24头文件命名规范命名规范头文件命名规范命名规范u头文件名称模板:头文件名称模板:XYY.hu名称模板说明:名称模板说明:u X - 文件归属的子系统编号文件归属的子系统编号u YY 业务描述,建
9、议不超过业务描述,建议不超过20个字符个字符u .h - 后缀后缀u头文件名称举例:头文件名称举例: Xcm.hwww.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范11.1概述1.2文件体系结构1.3源文件结构1.4TUXEDO服务程序组成1.5文件命名规范1.6TUXEDO服务命名规范1.7编码规则www.si-04-Sep-24TUXEDO服务命名规范服务命名规范 u服务名称模板:服务名称模板:sX ABCDu名称模板说明:名称模板说明:u s - 服务名第一个字符,为固定字符服务名第一个字符,为固定字符s(server)u X - 文件归属的子系统编号文件归属
10、的子系统编号u说明:说明:TUXEDO服务在服务组文件定义服务在服务组文件定义u服务名称举例:服务名称举例:sxGetCustNamewww.si-04-Sep-24结构体的命名u结构体名称模板:结构体名称模板:sXAJABCus - 结构名称第一个字符,小写,结构名称第一个字符,小写,structuX - 结构归属的子系统编号结构归属的子系统编号uAJ - 业务含义,建议不超过业务含义,建议不超过20个字符个字符uABC 有三种情况有三种情况u In 输入参数输入参数u Out 输出参数输出参数www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范11.1概述1.2
11、文件体系结构1.3源文件结构1.4TUXEDO服务程序组成1.5文件命名规范1.6TUXEDO服务命名规范1.7编码规则www.si-04-Sep-24服务编码规则服务编码规则 -1u规则1 常连接必须定义放在常连接必须定义放在tpsvrinit函数中,断开放在函数中,断开放在tpsvrdone函函数中。数中。uint tpsvrinit(int argc, char *argv)uuspublicDBLogin(NULL,NULL,sGetWorkData,LABELDBCHANGE);ureturn(0);uuvoid tpsvrdone()uuspublicDBClose(LABELDB
12、CHANGE);u www.si-04-Sep-24服务编码规则服务编码规则 -2u规则2 必须使用必须使用get_input_parms32_2函数取函数取TUXEDO的传入参数。的传入参数。u废弃废弃get_input_parms32函数。函数。u规则3 必须使用必须使用add_value32函数向函数向TUXEDO中压入一个值。中压入一个值。u规则4 必须使用必须使用Fget32函数从函数从TUXEDO中读取多行中取一个值。中读取多行中取一个值。u规则5 数据库登录必须用数据库登录必须用spublicDBLogin函数登录。函数登录。u规则6 必须使用必须使用sChkDBLogin函数校
13、验数据库连接。函数校验数据库连接。u此函数用于数据库常连接的数据库连接验证。此函数用于数据库常连接的数据库连接验证。www.si-04-Sep-24服务编码规则服务编码规则 -3u规则7 TUXEDO服务中不能出现服务中不能出现SQL语句,所有的语句,所有的SQL语句必须出现语句必须出现在公用函数中。在公用函数中。u规则8 控制注释的输出。注释采用统一的注释控制规则,对日志进行控制注释的输出。注释采用统一的注释控制规则,对日志进行非类,分监控类、调试类等,原则上服务中不能出现非类,分监控类、调试类等,原则上服务中不能出现printf等语句。等语句。u使用使用DBUG_ENTER、DBUG_PR
14、INT等函数。等函数。u规则9 调用服务统一入口函数调用服务统一入口函数CallTuxedo,跟踪服务的入口参数信息。,跟踪服务的入口参数信息。u规则10 输入输出参数的长度不能超过输入输出参数的长度不能超过1000个字节,否则会溢出。个字节,否则会溢出。u规则11 TUXEDO的错误代码和错误信息必须放在的错误代码和错误信息必须放在SVC_ERR_NO32和和SVC_ERR_MSG32中,不能占用中,不能占用GPARM32_X的位置。的位置。www.si-04-Sep-24服务编码规则服务编码规则 -4u规则12TUXEDO的返回值的数量不能超过的返回值的数量不能超过50个;如果个;如果超过
15、超过50个参数,参数按行放在第一列个参数,参数按行放在第一列GPARM32_0中。中。u规则13输出参数缓冲的内存分配,必须调用函数输出参数缓冲的内存分配,必须调用函数MemoryAllocate32。u规则14一个一个TUXEDO SERVER中的中的SERVICE不能超不能超过过10个。个。u规则15每个每个SERVICE的函数说明,必须在的函数说明,必须在SERVICE前说明清楚,包括描述、输入输出,返回值。前说明清楚,包括描述、输入输出,返回值。www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范22.1技术架构2.2开发流程2.3案例开发www.si-04
16、-Sep-24技术架构技术架构-概述概述www.si-04-Sep-24技术架构技术架构-uType介绍介绍u接口标准化,所有系统函数的接口格式统一接口标准化,所有系统函数的接口格式统一u扩展性强,在接口不变的情况的下,参数可以树扩展性强,在接口不变的情况的下,参数可以树状扩充状扩充u升级、维护简单,风险小升级、维护简单,风险小u跨平台应用,可以在任意平台间轻便移植跨平台应用,可以在任意平台间轻便移植www.si-04-Sep-24技术架构技术架构-uType介绍介绍【重点关注蓝色字体部分的描述重点关注蓝色字体部分的描述】typedef struct tagutype utype;typede
17、f struct tague int type; /包含的包含的uType数据条数数据条数 union char v_char; int v_int; long v_long; double v_double; char * p_char; utype * p_utype; value; ue; struct tagutype int cnt; int capacity; ue *ppe;utypeintstringutypedoublestringutypestringstringstringwww.si-04-Sep-24技术架构技术架构-uType介绍介绍uuType函数原型函数原型要求
18、系统内的函数全部采用一下接口进行描述,不同函要求系统内的函数全部采用一下接口进行描述,不同函数只是数只是functionName不同。不同。函数原型如下:函数原型如下:utype* functionName(utype *puInParam, TCtrlInfo *ptCtrlInfo)u3.2uType接口数据定义接口数据定义utype是个树状的数据结构描述,在是个树状的数据结构描述,在uType结构体内可以结构体内可以无限级扩展。无限级扩展。www.si-04-Sep-24技术架构技术架构-组件分层组件分层SERVERSERVICEBP(Business Process)BC(Busine
19、ss Component)所有业务集中在所有业务集中在BC/BP,Server/Service不能有逻辑不能有逻辑www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范22.1技术架构2.2开发流程2.3案例开发www.si-04-Sep-24开发流程开发流程-目录结构目录结构开发目录结构:开发目录结构:framework/* 开发环境根目录开发环境根目录 */bin/* 可执行文件目录可执行文件目录 */include/* 头文件目录头文件目录 */lib/* 静态库目录静态库目录 */src/* 源代码目录源代码目录 */ baselib/* 基础库类库基础库类库
20、 */ BossLib/* BOSS基础库目录基础库目录 */ 。/* 其他基础库其他基础库 */ custsvc/* 客户服务子系统客户服务子系统 */ business/* 业务组件业务组件 */ custsvcBCP/* 原子服务原子服务 */ server/* 业务组件发布业务组件发布 */ prodmng/* 产品管理子系统产品管理子系统 */ 。/* 其他子系统其他子系统 */ svctest/* 业务测试目录业务测试目录 */ tools/* 辅助工具辅助工具 */ test/* 测试目录测试目录 */synlib/* 动态库目录动态库目录 */tools/* 辅助工具辅助工具
21、*/www.si-04-Sep-24开发流程开发流程-开发步骤开发步骤www.si-04-Sep-24开发流程开发流程-开发步骤开发步骤以以“客户服务客户服务”为例:为例:u原子服务开发原子服务开发使用使用autoBC 工具生成原子服务工具生成原子服务原子服务的命名规则:原子服务的命名规则:c + 操作的表名操作的表名 + .cpp,例如,例如cdCustMsg.cpp内部函数命名规则:内部函数命名规则:c + 数据操作符(数据操作符(Q、I、U、D)+ 操作的表操作的表名名 + .cpp,例如:,例如:cQdCustMsg(查询用户资料),(查询用户资料),cIdCustMsg(插入用户资料
22、),(插入用户资料), cUdCustMsg(更新用户资料),(更新用户资料), cDdCustMsg(删除用户资料)(删除用户资料)修改修改makefile文件,将生成的原子服务编译成库文件,将生成的原子服务编译成库libcustsvcBCP.a,供业务构件使用,供业务构件使用将生成的原子服务函数在头文件中将生成的原子服务函数在头文件中custsvcBCP.h声明声明u业务组件开发业务组件开发u业务组件发布业务组件发布www.si-04-Sep-24开发流程开发流程-开发步骤开发步骤以以“客户服务客户服务”为例:为例:u原子服务开发原子服务开发u业务组件开发业务组件开发编写业务组件,执行一个
23、完整的业务逻辑,需要调用编写业务组件,执行一个完整的业务逻辑,需要调用libcustsvcBCP.a中的原子服务中的原子服务业务组件的命名规则:业务组件的命名规则:pub + 业务名称业务名称 + .cpp,例如:,例如:pubCreateUser.cpp修改修改makefile文件,将业务组件编译成客户服务组件文件,将业务组件编译成客户服务组件库库 libcustsvc.a将生成的业务组件在头文件中将生成的业务组件在头文件中 custsvc.h声明声明u业务组件发布业务组件发布www.si-04-Sep-24开发流程开发流程-开发步骤开发步骤以以“客户服务客户服务”为例:为例:u原子服务开发
24、原子服务开发u业务组件开发业务组件开发u业务组件发布业务组件发布编写业务组件发布文件,在文件中添加自己业务组件,编写业务组件发布文件,在文件中添加自己业务组件,extern C void sMovePhone(TPSVCINFO *transb)TuxInterface(sCMultiUser, transb, LABELDBCHANGE, CreateMultiUser, CreateMultiUser, LONG_CONN_TYPE,0);发布文件命名规则:发布文件命名规则:R + 业务名称业务名称 + .cpp,例如:,例如:RCreateUser.cpp修改修改makefile文件,添
25、加业务组件编译项文件,添加业务组件编译项编译业务组件文件,重新启动服务(编译业务组件文件,重新启动服务(server)www.si-04-Sep-24开发流程开发流程-BC生成器生成器u使用使用autoBC脚步可以直接生成访问数据库实体表脚步可以直接生成访问数据库实体表的原子接口函数,包括的原子接口函数,包括select insert update delete等接口,通过原子接口可以屏蔽外围系统等接口,通过原子接口可以屏蔽外围系统对数据库的直接访问。语法如下:对数据库的直接访问。语法如下:autoBC dbcustadm/dbcustadmahlt X X cFuncName sqlfile
26、 suffixwww.si-04-Sep-24开发流程开发流程-BC生成器生成器autoBC dbcustadm/dbcustadmahlt X Y cFuncName sqlfile suffix数据库连接串输入参数形式:0/10:单值,1:多值输出参数形式:0/10:单值,1:多值原子函数名数据库操作SQL文件(可选参数)动态表后缀名www.si-04-Sep-24开发流程开发流程-测试工具测试工具u使用使用clut 工具可以对编写完成的工具可以对编写完成的utype输入输出格式的输入输出格式的Tuxedo服务进行测试:服务进行测试:clut.sh 业务名称业务名称.clutwww.si-
27、04-Sep-24开发流程开发流程-测试工具测试工具uclut文件格式文件格式“-”+ 数据类型数据类型 + 值值 + 注释信息注释信息以以“-”开头,每个嵌套层比上一层多一个开头,每个嵌套层比上一层多一个“-”,类似于,类似于XML文件格式文件格式“#”为注释符号为注释符号u举例:举例:-utype #TOprInfo-string 0208091200000008 #sCustOrderId-long 2000012805097 #lLoginAccept-string 1104 #sOpCode-string ba0001 #sLoginNo-string CODCDOJHGECIFON
28、G #sLoginPwd-string 172.16.24.100 #sIpAddress-string 10032 #sOprGroupId-string 20080912 09:59:01 #sOpTimewww.si-04-Sep-24开发流程开发流程-开发案例开发案例u以以“用户开户用户开户”业务组件为例:业务组件为例:1.SQL文件准备文件准备2.自动生成自动生成BC原子服务原子服务3.编写业务组件编写业务组件4.发布业务组件发布业务组件5.测试业务组件测试业务组件www.si-04-Sep-24提纲提纲旧版TUXEDO规范新版TUXEDO规范22.1技术架构2.2开发流程2.3案例
29、开发www.si-04-Sep-24开发流程开发流程-开发案例开发案例uSQL文件准备文件准备在在framework/src/custsvc/custsvcBCP/sqlFile目录下目录下编写插入编写插入dCustMsg表的表的SQL文件文件cIdCustMsg.sql ,文,文件内容:件内容:INSERT INTO dCustMsg(ID_NO,CUST_ID,CONTRACT_NO,IDS,PHONE_NO)VALUES(:ID_NO,:CUST_ID,:CONTRACT_NO,:IDS,:PHONE_NO) sqlFile规则:规则:1.只能是单条只能是单条insert/update/
30、delete/select的的SQL语句语句2.绑定变量名称和字段名称一致,前面加绑定变量名称和字段名称一致,前面加“:”号,后面跟号,后面跟“”,对于,对于number型字段大于型字段大于8的用的用long型表示,小于型表示,小于8的用的用int表示表示www.si-04-Sep-24开发流程开发流程-开发案例开发案例u自动生成自动生成BC原子服务原子服务执行如下语句,自动生成执行如下语句,自动生成BC原子服务到上一级的原子服务到上一级的cdCustMsg.cpp:autoBC dbcustadm/dbcustadmahlt cIdCustMsg 0 0 cIdCustMsg.sql ./c
31、dCustMsg.cpp修改修改custsvcBCP.h文件,增加函数声明和结构定义文件,增加函数声明和结构定义utype* cIdCustMsgExt(utype * inParam,TCtrlInfo *errInfo);修改修改makefile文件,增加文件,增加cdCustMsg编译项编译项修改同级目录下的修改同级目录下的all.sh,增加该语句备份,增加该语句备份其他其他“用户开户用户开户”要用到的原子服务生成步骤和上面步要用到的原子服务生成步骤和上面步骤相同骤相同www.si-04-Sep-24开发流程开发流程-开发案例开发案例u编写业务组件编写业务组件在在framework/sr
32、c/custsvc/business目录下编写目录下编写pubCreateUser.cpp“用户开户用户开户”业务组件业务组件编写规则:编写规则:1.头文件引用头文件引用 #include ”custsvc.h“2.对于函数中用到的对于函数中用到的utype类型,定义类型,定义uAutoPtr类型,如果返回该类型,如果返回该类型需要调用类型需要调用release()方法方法3.存取存取utype类型,使用类型,使用utSetXXX和和utGetXXX方法方法 修改文件,增加函数声明和结构定义修改文件,增加函数声明和结构定义utype* CreateMultiUser(utype *puInPa
33、ram, TCtrlInfo *ptCtrlInfo);修改修改makefile文件,增加文件,增加pubCreateUser编译项编译项 www.si-04-Sep-24开发流程开发流程-开发案例开发案例u发布业务组件发布业务组件在在framework/src/custsvc/server目录下发布目录下发布RCreateUser.cpp “用户开户用户开户”业务组件业务组件/* * inparam sCMultiUser 批量开户函数批量开户函数 */extern C void sCMultiUser(TPSVCINFO *transb) TuxInterface(sCMultiUser,
34、 transb, LABELDBCHANGE, CreateMultiUser, CreateMultiUser, LONG_CONN_TYPE,0);编写规则:编写规则:1.头文件引用头文件引用 #include ”custsvc.h“2.修改修改makefile文件,增加文件,增加RCreateUser编译项编译项#BEGIN RCreateUser#RCreateUser= -s sCMultiUser -s sGetSeqNoRCreateUserOBJ=RCreateUser.oRCreateUser:$(RCreateUserOBJ) rm -f $(BINDIR)/RCreate
35、User $(SRVBEACOMP) $(RCreateUser) -o $(BINDIR)/$ -f $(RCreateUserOBJ)#END RCreateUser# www.si-04-Sep-24开发流程开发流程-开发案例开发案例u测试业务组件测试业务组件在在framework/src/svctest/custsvc目录下编写目录下编写sCMultiUser.clut “用户开户用户开户”业务业务的测试文件,执行的测试文件,执行clut.sh sCMultiUser.clut进行测试进行测试clut文件格式文件格式1.“-”+ 数据类型数据类型 + 值值 + 注释信息注释信息2.以以
36、“-”开头,每个嵌套层比上一层多一个开头,每个嵌套层比上一层多一个“-”,类似于,类似于XML文件格式文件格式3.“#”为注释符号为注释符号举例:举例:-utype #TOprInfo-string 0208091200000008 #sCustOrderId-long 2000012805097 #lLoginAccept-string 1104 #sOpCode-string ba0001 #sLoginNo-string CODCDOJHGECIFONG #sLoginPwd-string 172.16.24.100 #sIpAddress-string 10032 #sOprGroupId-string 20080912 09:59:01 #sOpTimewww.si-04-Sep-24