电力大数据编码规范.docx
《电力大数据编码规范.docx》由会员分享,可在线阅读,更多相关《电力大数据编码规范.docx(22页珍藏版)》请在三一文库上搜索。
1、电力大数据编码规范XX科技股份有限公司编制目录一、编程规约3(一)命名风格3(二)常量定义7(三)代码格式8(四)OOP规约11(五)集合处理17(六)并发处理22(七)控制语句28(八)注释规约32(九)其它34二、异常日志35(一)异常处理35(二)日志规约38三、单元测试40四、安全规约42五、MySQ1.数据库43(一)建表规约43(二)索引规约46(三)SQ1.语句48(四)ORM映射49六、工程结构50(一)应用分层50(二)二方库依赖51(三)服务器53七、设计规约54附1:专有名词解释58一、编程规约(一)命名风格1 .【强制】代码中的命名均不能以下划线或美元符号开始,也不能以
2、下划线或美元符号结束。反例:_name/name/Sname/name_/name$/name2 .【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和语法可以让阅读者易于理解,避免岐义。注意,纯拼音命名方式更要避免采用。正例:renminbi/a1.ibaba/taobao/youku/hangzhou等国际通用的名称,可视同英文。反例:DaZhePromotion打折/geIPingfenByNameO评分/int某变量=3【强制】类名使用UpperCame1.Case风格,但以下情形例外:DO/BO/DTO/VO/A0PO/UID等。上例:
3、JavaServer1.essP1.atform/UserDO/Xm1.Service/TcpUdpDea1./TaPromotion反例:Javaserver1.essp1.atforin/UserDo/XM1.Service/TCP1.DPDea1./TAPromotion4 .【强制】方法名、参数名、成员变量、局部变量都统一使用IowerCanic1.Case风格,必须遵从驼峰形式。王例:Ioca1.Va1.ue/getHttpMessageO/inputUser1.d5 .【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。IE例:MAX_SToCK_CO
4、UNT/CACHEEXPIRED_TIME反例:MAXCOUNT/EXPIREDTIME6 .【强制】抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以TeSt结尾。7 .【强制】类型与中括号紧挨相连来表示数组。正例:定义整形数组intarrayDemo;反例:在main参数中,使用StringargS口来定义。8 .【强制】POJO类中布尔类型变量都不要加is前缀,否则部分框架解析会引起序列化错误。说明:在本文MySQ1.规约中的建表约定第一条,表达是与否的值采用is_xxx的命名方式,所以,需要在resu1.tMap设
5、置从is_xxx到XXX的映射关系。反例:定义为基本数据类型Boo1.eanisDe1.eted的属性,它的方法也是iSDe1.etedO,RPC框架在反向解析的时候,“误以为”对应的属性名称是de1.eted,导致属性获取不到,进而抛出异常。9 .【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。工例:应用工具类包名为com.a1.ibaba.ai.uti1.类名为MessageUtiIs(此规则参考spring的框架结构)10 .【强制】避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相
6、同的命名,使可读性降低。说明:子类、父类成员变量名相同,即使是pub1.ic类型的变量也是能够通过编译,而局部变量在同一方法内的不同代码块中同名也是合法的,但是要避免使用。对于非setter/getter的参数名称也要避免与成员变量名称相同。反例:pub1icc1.assConfusingNamepub1.icintage:/非setter/getter的参数名称,不允许与本类成员变量同名pub1.icvoidgetDataStringa1.ibabaifconditionfina1.intmoney=531:/.for(inti0;i?andd=?那么即使C的区分度更高,也必须把c1.放在索
7、引的最前列,即索引idx_d_co10. 防止因字段类型不同造成的隐式转换,导致索引失效。11. 【参考】创建索引时避免有如下极端误解:1)宁滥勿缺。认为一个查询就需要建一个索引。2)宁缺勿滥。认为索引会消耗空间、严重拖慢记录的更新以及行的新增速度。3)抵制惟一索引。认为业务的惟一性一律需要在应用层通过“先查后插”方式解决。合元素数量,控制在100O个之内。10 .【参考】如果有国际化需要,所有的字符存储与表示,均以utf-8编码,注意字符统计函数的区别。说明:SE1.ECT1.ENGTH(轻松工作”);返回为12SE1.ECTaIARACTER.1.ENGTH(轻松工作”);返回为4如果需要
8、存储表情,那么选择utf8mb4来进行存储,注意它与utf-8编码的区别。11 .(亨】TRUNCATETB1.E比DE1.ETE速度快,且使用的系统和事务日志资源少,但TRUNCATE无事务且不触发trigger,有可能造成事故,故不建议在开发代码中使用此语句。说用:TRUNCATETAB1.E在功能上与不带WHERE子句的DE1.ETE语句相同。(四)ORM映射1 .【强制】在表查询中,一律不要使用*作为查询的字段列表,需要哪些字段必须明确写明。说明:1)增加查询分析器解析成本。2)增减字段容易与resu1.tMap配置不一致。3)无用字段增加网络消耗,尤其是text类型的字段。2 .【强
9、制】POJO类的布尔属性不能加is,而数据库字段必须加is_,要求在resu1.tMap中进行字段与属性之间的映射。说明:参见定义POJO类以及数据库字段定义规定,在resuhMap中增加映射,是必须的。在MyBa1.iSGenerator生成的代码中,需要进行对应的修改。3 .【强制】不要用resu1.tc1.ass当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义;反过来,每一个表也必然有一个POJO类与之对应。说明:配置映射关系,使字段与DO类解耦,方便维护。4 .【强制】Sq1.Xm1.配置参数使用:#,Sparamtf不要使用S此种方式容易出现SQ1.注入。【强制】iBAT
10、IS自带的queryFor1.ist(StringStatementName,intstart,iniSiZe)不推荐使用。说叫:其实现方式是在数据库取到StatementName对应的SQ1.语句的所有记录,再通过sub1.ist取start,size的子集合。正例:Mapmap=newHashMapOO;map.put(wstart,start);map.put(size,size);6 .【强制】不允许直接拿HashMap与Hashtab1.e作为查询结果集的输出。说明:resu1.tc1.ass=Hashtab1.e”,会置入字段名和属性值,但是值的类型不可控。7 .【强制】更新数据表
11、记录时,必须同时更新记录对应的gmt_modified字段值为当前时间。8 .【不要写一个大而全的数据更新接口。传入为POJO类,不管是不是自己的目标更新字段,都进行updatetab1.esetc1.=va1.ue1.,c2=va1.ue2,c3=va1.ue3;这是不对的。执行SQ1.时,不要更新无改动的字段,一是易出错;二是效率低;三是增加bin1.og存储。9 .QTransactiona1.事务不要溢用。事务会影响数据库的QPS,另外使用事务的地方需要考虑各方面的回滚方案,包括缓存回滚、搜索引擎回滚、消息补偿、统计修正等。10 .【甘考】isEqua1.中的CompareVa1.ue
12、是与属性值对比的常量,一般是数字,表示相等时带上此条件;isNotEmpty表示不为空且不为nu1.1.时执行;isNotNu1.1.表示不为nu1.1.值时执行。六、工程结构(一)应用分层1 .I图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于WCb层,也可以直接依赖于Service层,依此类推:t据持久区(I)AOK1.开放接口层:可直接封装Service方法暴露成RPC接口;通过Web封装成http接口:进行网关安全控制、流量控制等。终端显示层:各个端的模板渲染并执行显示的层。当前主要是ve1.ocity渲染,JS演染,JSP渲染,移动端展示等。Wcb层:主要是对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电力 数据 编码 规范
