已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ETL 开发规范 第 1 页 共 27 页 ID LC CMM PE TEMPLATE 22 中国电信省级经营分析概要设计规格书中国电信省级经营分析概要设计规格书 业务分册 V 1 0 南京联创科技股份有限公司 文文 档档 信信 息息 项项 目目 名名 称称XX 项目 项项 目目 经经 理理XXX 文文 档档 编编 号号 LC CMM PE TEMPLATE 22 ETL 开发规范 第 2 页 共 27 页 文文 档档 变变 更更 记记 录录 版版 本本 编编 号号版版 本本 日日 期期作作 者者说说 明明 V1 02003 11 11 XXX XXX初稿 审审 核核 审核组织审核组织审核代表审核代表签字签字时间时间 批批 准准 批准组织批准组织批准代表批准代表签字签字时间时间 ETL 开发规范 第 3 页 共 27 页 目 录 1总则总则 4 1 1概述 4 1 2设计原则 4 1 2 1统一设计 规范开发 4 1 3数据获取和 ETL 处理 4 1 3 1数据获取 4 1 3 2ETL处理 5 1 4数据存储 5 1 4 1数据分表 5 1 4 2数据分区 5 1 4 3关于两个特征字段 5 2ETL 规范规范 6 2 1数据处理规范 6 2 1 1标识统一规范 6 2 1 2数据分表命名规范 6 2 1 3程序命名规范 6 2 1 4日志规范 7 2 1 5动态建表规范 7 2 1 6参数规范 7 2 2ETL 模块划分 7 2 3代码编写规范 8 2 3 1编写目的 8 2 3 2代码编写通用规范 8 2 3 3SQL代码编写规范 11 2 3 4C C 编程规范 16 ETL 开发规范 第 4 页 共 27 页 1 总则总则 1 1 概述概述 本规范定义联创科技在中国电信公司省级经营分析系统 PBI 项目中 ETL 相关的设计 建设基本原 则和规范 1 2 设计原则设计原则 本规范适用于联创科技股份公司省级电信经营分析项目 ETL 小组 1 2 1 统一设计 统一设计 规范开发规范开发 1 省级经营分析系统由于数据庞大 因此 在数据 ETL 上花费的工作量是巨大的 为了减轻系统负 担 提高系统效率 繁杂的统一编码 统一维度标识等工作需要在数据进入数据仓库之前完成 仓库区 之后只负责有限范围内的 ETL 工作 2 省级经营分析的接口为文件接口 此时 需要建立规范 清晰的文件接口格式及数据传送协议 3 对于编程工作 需要定制统一的开发模板 及开发说明及修改模板 以利于和测试 工程等后续 环节的良好衔接 4 ETL 编程的模块划分将配合系统规划进行各模块的划分 清晰地体现出各个模块之间的依赖关系 并降低各模块之间的耦合 保证模块内的稳定性 和良好扩展性 1 3 数据获取和数据获取和 ETL 处理处理 1 3 1 数据获取数据获取 设计点和评估因子说明 业务系统承载能力评估 网络承载能力评估 数据获取实时性需求 接口双方通讯机制与约定 接 口数据的维护 ETL 开发规范 第 5 页 共 27 页 1 3 2 ETL 处理处理 设计点和评估因子 数据转换处理逻辑 重抽支持 性能评估 1 4 数据存储数据存储 1 4 1 数据分表数据分表 进行按时间的数据分割处理 目的是能够方便 可行地进行索引建立 提取业务数据片断 同时也 为 ETL 重抽提供基本保障 1 4 2 数据分区数据分区 分区实际上是数据分割技术更细节的延伸 对于省级经营分析系统来说 数据量庞大 对各地传送 的数据 需要按地域进行分区以方便数据统计 ETL 重抽 1 4 3 关于两个特征字段关于两个特征字段 说明 数据仓库为所有的 RECORDS 记录 设计了 ETL CYCLE ID ETL 周期标识 和 ETL TIME 记录 实际加载时间两个特征字段 分别标识记录集合所属的 ETL 周期和记录的实际加载时间 目的 1 方便重抽处理 2 方便审核数据 例如 200308 月的帐单实际在 2003 年 10 月 01 日加载至数据仓库 那么这批记录的 ETL CYCLE ID 赋值为 200308 加载时间赋值为 2003 年 10 月 01 日 ETL 开发规范 第 6 页 共 27 页 2 ETL 规范规范 2 1 数据处理规范数据处理规范 2 1 1 标识统一规范标识统一规范 省级经营分析的数据来源于各个系统 即使在数据接口之前就已将各个本地网之间的数据标识统一 但数据汇集之后 仍然难保证标识的一致性 因此 ETL 小组约定 所有的标识均按以下规则进行数据转 换 1 所有标识位类型 VARCHAR2 30 2 地域编码 两位 接口标识 后缀补码 3 后缀补码的约定为字符 9 2 1 2 数据分表命名规范数据分表命名规范 ETL 的数据分表策略如下 模板表名 分割日期 说明 分割日期可以为天 月 年 具体由处理周期及存储策略决定 分表在数据处理过程中直接 生成 2 1 3 程序命名规范程序命名规范 程序命名需要做到见名知义 程序名尽量起得清晰 通俗 业务模块命名规则 程序属性简写 处理业务模块表名 遵循以上规则 名称超过规范长度的 可以适当进行简写 例如 对后端集市 市话主叫统计表 TBM LS CALLING 进行 ETL 的函数 则函数名为 F TBM LS CALLING 对后端集市 市话主叫统计表 TBM LS CALLING 进行 ETL 的程序 则程序名为 P TBM LS CALLING ETL 开发规范 第 7 页 共 27 页 技术模块的命名根据具体功能进行命名 不强制进行限定 2 1 4 日志规范日志规范 由 ETL 工具调度后统一记载日志 各业务 ETL 代码不需要重复记载此信息 2 1 5 动态建表规范动态建表规范 在程序执行过程中由程序自动建立的表为动态建表 ORACLE 动态建表时必须指定以下几个参数 1 表空间名 TABLESPACE 2 表初始化大小 INITIAL 3 表扩展大小 NEXT 4 模板表名 其余策略可以默认表空间的策略 2 1 6 参数规范参数规范 所有的 ETL 程序均设置以下传入参数 string strCycleID cycleid string strTemplateTableName 模板表名 string strTableSpaceName 表空间名 string strInitialSpace 初始尺寸 string strNextSpace 扩展尺寸 int iAutoPartition 是否自动分区 string strPartitionColumn 分区列名 int iPartitionNum 分区个数 string strStatUserName 统计用户名 string strStatPassWord 统计口令 string strStatServerName 统计服务名 所有的 ETL 程序均设置以下传出参数 psssparam strRetCode 0 返回代码 ETL 开发规范 第 8 页 共 27 页 psssparam strRetMsg NULL 返回消息 说明 错误代码及信息统一定制 日后将形成附加文档 2 2 ETL 模块划分模块划分 由于 ETL 调度工具的特性 一个表对表的 ETL 过程必须单独形成一个独立可执行文件供 ETL 工具调度 注 数据仓库的数据由 ETL 工具直接生成 不需要编写代码 2 3 代码编写规范代码编写规范 2 3 1 编写目的编写目的 编码规范对于程序员而言尤为重要 有以下几个原因 一个软件的生命周期中 80 的花费在于维护 几乎没有任何一个软件 在其整个生命周期中 均由最初的开发人员来维护 编码规范可以改善软件的可读性 可以让程序员尽快而彻底地理解新的代码 如果你将源码作为产品发布 就需要确任它是否被很好的打包并且清晰无误 一如你已 构建的其它任何产品 为了执行规范 每个软件开发人员必须一致遵守编码规范 好的代码规范是产品开发的生命线 制定本规范是希望在整个小组 内形成一个统一的代 码风格 提高代码的可维护性 2 3 2 代码编写通用规范代码编写通用规范 无论是 SQL 还是 C C 语言 ETL 小组的程序员必须遵循以下几个共同准则 2 3 2 1最重要的规则最重要的规则 保持简单 优雅的设计通常胜过复杂的编码 ETL 开发规范 第 9 页 共 27 页 2 3 2 2代码自文档化代码自文档化 要求编码人员将一部分基本文档直接以注释的形式输入代码中 并持续维护这些文档 具体要求如 下 2 3 2 2 1模块代码头注释要求模块代码头注释要求 模块头部说明 要求编码人员在模块头部位置注释模块信息 包括模块名称 模块标识 模块的主要逻辑 示例 功能 删除保留周期之外的记录 输入参数 iv c table name IN VARCHAR2 当前进行数据抽取表名 iv c table name IN VARCHAR2 表属主名 iv c cycle id IN VARCHAR2 数据抽取对应周期 iv n data cycle IN NUMBER 数据保留周期 iv c cycle col IN VARCHAR2 周期字段 输出参数 ov n sqlcode OUT NUMBER 处理结果 ov c sqlerrm OUT VARCHAR2 处理结果信息 程序说明 因删除记录并不能释放 ORACLE 里被占用的数据块表空间 它只把那些被删除的数据块标成 unused 故将数据控制在 一定保留周期之内的时候不可以采用 DELETE 记录的方式 而需要数据转存后进行表的重新生成 版本号 V1 0 0 作者 魏凌 创建日期 2003 12 10 2 3 2 2 2代码段落注释要求代码段落注释要求 每个代码的段落必须进行简要注释 内容包括段落的大致功能 帮助读者进行总体理解 如果 段落逻辑比较复杂 可以增加逻辑方面的注释 示例 修改运行结束日志 ETL 开发规范 第 10 页 共 27 页 UPDATE mc APP RUN LOG SET end time iv d end time run result iv c run result err msg iv c err msg WHERE app id iv n app id AND etl cycle id iv c cycle id AND cycle seq v n max cycle seq COMMIT 2 3 2 2 3代码行注释要求代码行注释要求 1 避免不必要的行注释 保证代码 变量可读的前提下建议不使用行注释 2 使用行注释解释对读者可能是晦涩的代码 示例 20P 表示销帐 20Q 表示欠费 SELECT COUNT INTO N CNT FROM ACCT ITEM 200308 WHERE ACCT ITEM STATE NOT IN 20P 20Q 2 3 2 2 4新增 修改注释新增 修改注释 修改和新增的代码段应该打上相应的标记 修改日期 动作类型 修改者 版本号 这样便于维护 人员了解修改的内容 对于需要删除的代码段暂时只允许采用注释的方式进行删除 在一段时间后 统 一整理删除 这样有利于代码的回滚 2 3 2 2 5其他类型的注释其他类型的注释 其他类型的注释用来帮助记录代码或者自文档化时附加的信息 例如对正式发布的代码进行本地化 修改时的注释等 ETL 开发规范 第 11 页 共 27 页 2 3 2 2 6代码和注释的维护要求代码和注释的维护要求 1 一致性 在代码的整个生命周期中 必须保障代码和相应的注释一致性 2 历史性 对已经正式发布的代码进行维护 修改活动必须保留一定的痕迹 2 3 3 SQL 代码编写规范代码编写规范 2 3 3 1统一编辑统一编辑 为避免已经编辑好的代码格式被打乱 影响代码阅读 统一使用编辑器 UltraEdit 32 或是 PLSQL DEVELOPER 版本不限 使用缩进格式帮助表示代码结构 段落 分组 缩进可以使用 TAB TAB 应该设为 4 位 按照模块代码的大致逻辑对代码进行分段 并使用两行空行进行段落划分 2 3 3 2注释的位置和标识注释的位置和标识 注释一般位于相应代码的正上方或者尾随对应的代码 注释和相应的代码之间不应有分割象征意义 的编辑符号存在 如 空行 必须使用 标识段落注释 必须使用 标识头注释 必须使用 标识行注释 对于其他类型的注释不作标识符号的要求 2 3 3 3代码运行跟踪代码运行跟踪 所有的 SQL 代码均需要定义位置变量 v c place 标识出代码目前执行到的位置 程序运行完成之后 也需要将位置信息结合完成写入日志 以方便快捷地定位程序执行完成时代码所运行到的步骤 2 3 3 4程序版本说明程序版本说明 在存储过程的变量区首部 必须定义一个变量 v VER 新创建时 值为 1 0 0 后面由 SCM 负责根据 ETL 开发规范 第 12 页 共 27 页 版本情况进行更改 工程实施人员根据这个变量的值 来判定当前的程序是否是最新的程序 2 3 3 5模块入口和出口模块入口和出口 每个模块入口时必须初始化模块返回标志为正常状态 每个模块只有一个正常出口 和一个出错出口 可以包含多个特定的出错处理但是必须有一个缺省 定义的出错处理 要求将正常出口和出错出口统一编写 定义在模块代码的尾部 具体参见本小节中统 一模块代码框架项目 2 3 3 6模块代码框架例子模块代码框架例子 PROCEDURE P TICUST ALL iv c cycle id IN VARCHAR2 iv n cycle type IN NUMBER ov n sqlcode OUT NUMBER ov c sqlerrm OUT VARCHAR2 IS 功能 进行接口系统客户档案相关数据抽取 输入参数 iv c cycle id IN VARCHAR2 数据抽取对应周期 iv n cycle type IN NUMBER 抽取周期类型 输出参数 ov n sqlcode OUT NUMBER ORACLE 错误代码 ov c sqlerrm OUT VARCHAR2 ORACLE 错误信息 版本号 V1 0 0 作者 LiHui 创建日期 2003 11 08 v c ver VARCHAR2 10 V1 0 0 程序版本号变量 v n app id NUMBER 程序 APP ID 变量 v d start time DATE 程序开始时间变量 v c place VARCHAR2 100 程序运行位置变量 v n data cycle NUMBER 数据保留周期 v c sql VARCHAR2 4000 动态 SQL 变量 v c begin date VARCHAR2 14 开始日期 v c end date VARCHAR2 14 结束日期 v c cycle id VARCHAR2 14 抽取周期 v c int type CHAR 1 增量类型 v e errs EXCEPTION v n count NUMBER ETL 开发规范 第 13 页 共 27 页 BEGIN ov n sqlcode 0 ov c sqlerrm 客户档案相关数据抽取 P TICUST ALL 保留 iv c cycle id 初值 v c cycle id iv c cycle id v c place 计算当前周期标识 PUB PKG PUB SP GET CYCLE DATE v c cycle id iv n cycle type v c begin date v c end date ov n sqlco de ov c sqlerrm IF ov n sqlcode 0 THEN RAISE v e errs END IF v c place 读取程序对应 APP ID SELECT PROCESS ID INTO v n app id FROM mc fd process WHERE PROCESS INFO P TICUST ALL v c place 写程序开始日志 v d start time sysdate PKG PUB SP WRITE RUN LOG v n app id v c ver v c cycle id v d start time null null null IF ov n sqlcode 0 THEN RAISE v e errs END IF 先依据传入的数据抽取周期调用公共函数 取出对应的开始和结束日期 v c place 读取周期对应开始和结束时间 PKG PUB SP GET CYCLE DATE v c cycle id iv n cycle type v c begin date v c end date ov n sqlcode o v c sqlerrm IF ov n sqlcode 0 THEN RAISE v e errs END IF 判断数据抽取方式 IF LENGTH v c cycle id 6 THEN v c int type F ELSE v c int type I ETL 开发规范 第 14 页 共 27 页 END IF v c place 读取 TICUST CUST 表数据保留周期 SELECT DATA STORE CYCLE INTO v n data cycle FROM TIMAN STORE CYCLE CFG WHERE INT TABLE NAME TICUST CUST v c place 删除保留周期之外及当前周期的数据 PKG PUB SP DEL SPILTH REC TICUST CUST IPD v c cycle id v n data cycle INT CYCLE ID ov n sql code ov c sqlerrm IF ov n sqlcode 0 THEN RAISE v e errs END IF SELECT COUNT into v n count FROM all indexes WHERE INDEX NAME IDX TICUST CUST IC AND OWNER IPD IF v n count 0 THEN v c place 删除已存在的索引 IDX TICUST CUST IC PKG PUB SP EXEC DSQL DROP INDEX IPD IDX TICUST CUST IC ov n sqlcode IF ov n sqlcode 0 THEN RAISE v e errs END IF END IF v c place 先取 SICUST CUST 表中对应 TICUST CUST 的数据 抽取客户档案数据 v c place 抽取客户档案数据 v c sql INSERT INTO TICUST CUST CUST ID CUST SEQ CUST CODE CUST NAME UP CUST ID AREA ID CERT NBR VIP CUST TYPE ID CUST GRADE ID CONS GRADE ID INDUS CAT ID ZIPCODE CREATED DATE REGION MEMO MODI DATE ADDRESS ID STATE INT DATE INT FLAG INT CYCLE ID SELECT CUSTOMER ID NVL CHG SERN 0 CUSTOMER ID CUST NAME PARENT ID XJDM SOCIAL ID VIP NBR NVL CUST CLASS 3 CUST LEV CUST LEV TRIM CUST STYLE POSTCODE CREATE DATE LATN ID BZ CHG DATE LPAD CUSTOMER ID 15 0 DECODE CUST STATE 70A 10A 70H 10X 70X 10X CUST STATE ETL 开发规范 第 15 页 共 27 页 sysdate 0 v c cycle id FROM SICUST CUST IF v c int type I THEN v c sql v c sql WHERE CHG DATE TO DATE v c begin date YYYYMMDDHH24MISS AND CHG DATE TO DATE v c end date YYYYMMDDHH24MISS END IF EXECUTE IMMEDIATE v c sql COMMIT v c place 创建索引 IDX TICUST CUST IC EXECUTE IMMEDIATE CREATE INDEX IDX TICUST CUST IC ON TICUST CUST INT CYCLE ID TABLESPACE TBS IPD IDX storage initial 5M next 5M v c place 程序正常结束 ov c sqlerrm v c place ov c sqlerrm 写程序结束日志 PKG PUB SP WRITE RUN LOG v n app id v c ver v c cycle id v d start time sysdate 0 ov c sqlerrm EXCEPTION WHEN v e errs THEN ROLLBACK ov n sqlcode SQLCODE ov c sqlerrm ov n sqlcode v c place ov c sqlerrm SQLERRM 写程序结束日志 PKG PUB SP WRITE RUN LOG v n app id v c ver v c cycle id v d start time sysdate 1 ov c sqlerrm WHEN OTHERS THEN ROLLBACK ov n sqlcode SQLCODE ov c sqlerrm ov n sqlcode v c place ov c sqlerrm SQLERRM 写程序结束日志 PKG PUB SP WRITE RUN LOG v n app id v c ver v c cycle id v d start time sysdate 1 ov c sqlerrm END P TICUST ALL ETL 开发规范 第 16 页 共 27 页 2 3 3 7SQL 语句书写要求语句书写要求 1 SQL 语句中 关键字 命令 函数 表名 字段名等一律采用大写字母标识 2 SQL 语句中 对自定义变量 自定义表名 字段名等一律采用小写字母标识 3 对复杂的 SQL 语句 要求使用缩进 分层 添加括号等编辑手段以方便阅读 维护 2 3 3 8使用系统资源的约定使用系统资源的约定 1 建立表 索引等存储实体的时候 需要指定表空间及存储策略 存储策略需要依据存储的实际容量来 计算 尽量减少存储的分配次数及浪费 2 所有临时表均需要建立在系统指定的临时表存放的空间 临时表使用完之后立即删除 以避免占用系 统空间 3 使用系统耦合资源时 注意释放 如元数据和数据抽取监控的日志表资源 INSERT UPDATE 等动作后 必须立即 COMMIT 保障模块执行完毕后全部释放占用的临时表空间 注意根据本规范中数据库规范 一章中的临时表命名规范命名所使用的临时表 避免与其他模块所使用的临时表的表名重复 造成耦 合错误 2 3 3 9数据重抽支持数据重抽支持 模块代码要求无条件支持同批数据的重新抽取 如果确实无法支持的 必须报告设计人员 进行评 审 文档记录 2 3 3 10公用代码公用代码约定约定 1 凡是可能多处使用的代码段 均需要考虑封装为公用代码 以统一处理口径和程序出错时的代码修改 量 2 公用代码在处理过程中出错不写错误日志 但需要但错误代码和错误信息反馈给调用方 由调用方进 行错误处理 3 所有公用代码进行打包封装 统一放在 PUB 用户下 公用代码指定几个人员维护 并非所有程序员对 其都有维护的权限 2 3 4 C C 编程规范编程规范 2 3 4 1命名规则命名规则 我们在程序设计和开发过程中 会涉及到许多各类的命名 其中有公用 所有系统共同使用 的和 ETL 开发规范 第 17 页 共 27 页 各自私用 单一系统使用 的 为了使各类的命名层次整齐 清晰明了 统一作如下规定 2 3 4 2常量命名规则常量命名规则 常量必须全部使用大写 且都集中放于头文件中 且在声明后加上注释 例如 HLR 的最多个数 defineMAXHLRNUM 5 如为用 const 定义的常量时 也应全部使用大写 且都要集中放于头文件中 在声明后加注释 例如 用户名的最大长度 const int MAXIDLENGTH 30 2 3 4 3结构命名规则结构命名规则 结构用大写的 S 作为前缀 前缀的下一个字母用大写 结构中的变量需遵循变量命名规则 结构体都集中放于头文件中 且在声明后加上注释 结构体内各行和关键字行相差一个 Tab 不得使用空格代替 请看如下的代码 struct SVosInfo 进程号 pid t pidVospid 存放与 VOS 相连进程的状态信息 char cpVosmonitor O C MAXMONITORLEN 存放与 VOS 相连进程的用途信息 char cpVosmonitorinfo O C MAXMONITORLEN 2 3 4 4类命名规则类命名规则 类用大写的 C 作为前缀 前缀的下一个字母用大写 类中的变量必须用 m 开始 其后需遵循变量命名规则 类都集中放于头文件中 且在声明后加上注释 且类中的各个变量 函数等都要加上注释 类内各行和关键字行相差一个 tab 不得使用空格代替 请看如下的代码 ETL 开发规范 第 18 页 共 27 页 class CVosInfo private 进程号 int m iVospid public 得到进程号 int fnGetpid 2 3 4 5变量的命名规则变量的命名规则 用小写字母的前缀表示变量的类型 前缀的下一个字母用大写 前缀类型例子 bBoolean 布尔 bIsParent bybyte 字节 byFlag cp cchar 字符串 字符 cpText cTemp o对象实例oMain fnFunction 函数 fnCallback iint 整型 iHello nunsigned int 无符号整型 nSend ppointer 指针 pFind strstring CString 类 strReceive llong 长整型 lWind pidpid t 进程类型 pidGetid sstructure 结构实例 sVosInfo fklforkLock 进程锁 fklSignal trlthreadLock 线程锁 trlPthread tidtid 线程 ID tidHello trcthrCond 线程条件变量 trcFlag lstlist 列表 lstCUserGuest f float 浮点数 fSize ddouble 双精度型 dHigh fpfile 文件 fpStudent stmstream 流 stmHello vpvoid 类型指针vpNULL tttime t ttStart shshort 短整数 shHello 说明 1 类指针命名 以小写 p 开头 后接类名 参见类命名规则 或者缩写 缩写一般用类名的大写字 ETL 开发规范 第 19 页 共 27 页 母表示 2 结构指针命名 以小写 p 开头 后接结构名 参见结构命名规则 或者 缩写一般用类名的大写 字母表示 3 由于 list 是由实体类与模板类共同组成的 因此在命名时 遵守以下规则 lst 实体类类名 列表意义名 如 实体类为 CUser列表意义名为Guest 那么列表名就为lstCUserGuest 4 普通类型的指针命名 以该类型缩写字母打头 后跟指针标记 p 如 lpIndex 表示一个长整形的指针 2 3 4 6全局变量命名规则全局变量命名规则 全局变量必须以 g 开头 其后需符合变量命名规则 如 int g iGetindex 2 3 4 7类中类中 next 指针约定指针约定 在类中经常会使用 next 用以指向下一个对象 对此约定命名仍为 next 如 class CTest private CTest next 2 3 4 8类中类中 prev 指针约定指针约定 在类中经常会使用 prev 用以指向前一个对象 对此约定命名仍为 prev 如 class CTest private CTest prev 2 3 4 9类型命名规则类型命名规则 在用 typedef 定义新的类型名时 应以 T 开头 用其定义的变量用 t 开头 其后需符合变量命名规 则 如 typedef struct double re im TComplex TComplex tProc ETL 开发规范 第 20 页 共 27 页 2 3 4 10编制风格编制风格 本文所谓的编制风格 仅仅指的是对编写程序时的书写表现形式的规定 与程序结构和组织形式无 关 2 3 4 11类编制规则类编制规则 在编制类时 需在类的头部进行声明 包括类的名称 Class 类的用途 Purpose 请看如下的代码 Class CList Purpose 一个列表类 用于存放某一对象的列表 主要实现有 增加对象 查找对象 得到对象以及将列表清空 2 3 4 12函数体编制规则函数体编制规则 在编制函数的时候 除了在 2 4 中提到的对放于头文件中原型说明的要求 在源程序文件中 函数前 需用统一的格式写清函数用途说明 Purpose 和返回值说明 Return 以及参数 parameters 和方法 methods 请看如下的代码 例 1 Function COCIInterface fnInit handles Parameters m Envhp OCI 环境句柄指针 m Srvhp 服务器上下文句柄指针 m Svchp 服务上下文句柄指针 m Errhp 出错报告句柄指针 m Authp 用户会话句柄指针 mode 初始化模式 Purpose 初始化连接句柄 Return 0 成功 1 失败 例 2 ETL 开发规范 第 21 页 共 27 页 Function fnAvoidRestart Purpose 防止重起的函数实现 Method 使用文件记录程序信息的方法 当运行某个程序时 先查找某特定文件 如果没有该文件 无人为故意删除 说明是第一次运行该程序 刷新 该 文件 否则 读出里面的进程信息 与当前进程信息进行比较 如果进 程 号与进程名都相同的话 说明 该程序目前正在运行 Return 无 例 3 Function fnVosAuth Purpose 用于完成与 VOS 连接的认证工作 Return 0 认证成功 1 认证失败 继续进行连接 int fnVosAuth int iClientsock class OVosconnect oVosconnect struct SMainconnect sMainconnect int iVosauthflag char chReceivedata 10240 chReceivedata 0 0 if fnVosconnect iClientsock oVosconnect sMainconnect iVosauthflag chReceivedata 0 return 1 if fnHLRlogin iClientsock oVosconnect iVosauthflag chReceivedata 0 return 1 return 0 2 3 4 13过程体编制规则过程体编制规则 在程序中包括有许多的过程体 如 while for if else 等 该过程体处于一对 中 并且过程体中要 及时换行 过程体内各行和关键字行相差一个 tab 不得使用空格代替 另外 在定义数组时应多使用常 量值来定义数组的大小 请看如下的代码 include define MAXLEN100 int iArreyone MAXLEN ETL 开发规范 第 22 页 共 27 页 int iArreytwo MAXLEN 在以后的程序中 只要对 worknum 进行遍历 就可以使用 MAXLEN 进行控制 for iIndex 0 iIndex MAXLEN iIndex iArreyone iIndex iArreytwo iIndex 2 3 4 14嵌套体编制规则嵌套体编制规则 本为要说明的嵌套体指的是过程体中包含过程体 要求内部的过程体各行同其上一级过程体的各行 相差一个 tab 不得使用空格代替 请看如下的代码 for iIndex 0 iIndex sVoslink iIndex pidVospid pidVospid if g psLink sVoslink iIndex iSocket 0 close g psLink sVoslink iIndex iSocket break 2 3 4 15注释注释 注释只能以 开头 以 结尾 不允许使用 为了使代码清晰易懂 易于维护 在编写代码的同时 要加注释 且注释要写在所解释代码的上一 行 1 1 在头文件中 常量的声明后要加注释 参 2 1 2 2 在类编制时要加注释 参 3 1 3 3 在函数编制时要加注释 参 3 2 4 4 在过程体编制过程中 要加注释 例如 处理 m strListOptions 中的每一项 while m strListOptions Count 0 每次都获取 m strListOptions 中的第一项 strOption m strListOptions Strings 0 根据 strOption 增加回答数据 ETL 开发规范 第 23 页 共 27 页 fnArrangeReply strOption 删除 m strListOptions 中的第一项 m strListOptions Delete 0 5 5 在嵌套体编制 即过程体中包含过程体的编制过程中 每个过程体都要加注释 例如 如果找到 0 x1b 则察看下一个字符是否是 0 x32 while iIndex 1 如果 0 x1b 的下一字符是 0 x32 清空 strFiltrate 并返回 0 if m strLine iIndex 1 0 x32 m strLine Delete iIndex 2 else 如果 0 x1b 的下一字符不是 0 x32 则删掉 0 x1b m strLine Delete iIndex 1 继续查找 0 x1b iIndex fnFind m strLine 0 x1b 2 3 4 16函数返回结果函数返回结果 函数成功 单一成功返回结果 返回 0 多成功返回结果 返回 0 1 2 函数失败 单一失败返回结果 返回 1 多失败返回结果 返回 1 2 3 2 3 4 17补充说明补充说明 编程约定 规定了在编程中必须遵守的规则 2 3 4 18变量使用变量使用 不得大量使用全局变量 除非非常需要 对于全局变量的作用范围需要严格控制 只允许在 main 函数和终止函数中允许使用全局变量 普通 函数 除 main 函数和终止函数 禁止使用全局变量 普通函数如需要使用全局变量 可通过传递全局变量指针或地址方式使用 普通函数使用的变量必须以参数方式传入或在函数内声明 不得使用除以上两种方式以外的变量 ETL 开发规范 第 24 页 共 27 页 变量应该由完整的单词组成 不要用简写 例如 numberOfPoints 不要写成 numPts 或者 np 变量的作用范围越广 对它的说明应该越多 越详细 不要再变量或函数名中使用下划线 变量在同一程序中 不应该被重复用于不同的意图 如果不是被迫 避免使用无符号类型 unsigned unsigned 关键字混淆了函数的声明 并且如果额外的 符号位不是必须的话 没有什么好处 变量应该再靠近它被使用的地方被声明 不要把所有的变量声明写在函数开头 不要在一个项目中使用全局变量除非项目太小 你将不能说清楚它们在什么地方 什么时候被使用 以及它们可能会有初始化次序问题 请尝试用静态类成员和 或者 一个单件 singleton 类区管理被广泛用到 的变量 常量应该被定义在尽可能小的范围 例如 如果一个常量仅在一个函数范围内使用 它应该被定义 在这个函数内 对逻辑变量 bool 用 int 取代 2 3 4 19注释使用注释使用 简明的代码好于有良好注释的混乱的代码 所有的努力应该用于通过良好的设计 简单化 良好的 命名和 规划产生简明的代码 应该明确注释只出现在代码不清晰的地方 避免被迫注释一些例如作者 日期 类名 函数名 修改列表之类很快就会过期或者通常不是必要的 东西 如果需要 尝试使用 source control 或者其它工具去加入这一类的信息 使用 来注释掉代码 这使你可以注释掉大块代码而不妨碍使用 结构 2 3 4 20文件使用文件使用 每一个类都应该有与它的类名相同的一个单独的源文件和一个单独的头文件 例如 类 FooBar 应该 被定义在 FooBar h 文件里 且被定位在 FooBar cxx 文件里 实现文件的扩展名 例如 c cc cpp cxx 依赖于你的编译器 cpp 可能是最流行的 其次是 c 使用预编译过的头文件 这能极大的加快编译速度 但是同时也提供了一个固定位子去 include 所有 的系统和库头文件 以至它们不必在别处再被 include 避免在 include 定义中加入绝对路径或者相对路径 应该将目录或者更目录加入 makefile 中的包含路径 列表中 例如把 path libraries 作为包含目录 把 include LibrarySubDir filename h 定义在预编译头文件中 除了在基类头文件中 不要在头文件中放 include 这将极大加快编译速度 这可能产生一些问题 如 果头文件需要一些其它类作为函数参数或者类成员 解决这个问题的方法是 在头文件里预先定义这个 类并保持一个成员引用 这些成员使用构造函数在堆里产生 当然使用析构函数释放 ETL 开发规范 第 25 页 共 27 页 2 3 4 21编码式样编码式样 一行应该只有一个表达式 例如常见的行如下 if doSomething false should be split into two lines result doSomething if result false 避免使用 goto 然而使用 goto 以跳出一系列嵌套的循环是有用的 一个更好的方法是将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区插花艺术创新创业项目商业计划书
- 老年收藏爱好服务创新创业项目商业计划书
- 宠物消化系统疾病创新创业项目商业计划书
- 美容产品多语言包装企业制定与实施新质生产力项目商业计划书
- 心理咨询小程序开发方案
- 小学语文第三单元说课稿示例
- 面向复杂分布数据的多尺度散点和簇异常检测方法研究
- 武汉调岗咨询解决方案
- 自媒体代理项目咨询方案
- 高端木工雕刻机施工方案
- 《水土保持工程施工监理规范》
- 《高中数学圆锥曲线基础与应用教学案例》
- 腱鞘炎病人的护理常规
- 意大利地理知识
- 竞聘医药经理述职报告
- 2025年四川里伍铜业股份有限公司招聘笔试参考题库含答案解析
- 《有机氟化工生产过程副产氢氟酸》
- 2023年北京地铁综控员题库第一册
- 化工厂装置知识培训课件
- 《电影场景构图》课件
- 《种鸡场卫生管理》课件
评论
0/150
提交评论