编写代码编码规范

u626187050 35 0 pdf 2018-12-25 20:12:25

编写代码编码规范编写代码编码规范编写代码编码规范编写代码编码规范编写代码编码规范public class login Proxy.public class ResourceObserver;12.【推荐】接口类中的方法和属性不要加任何修饰符号( public也不要加),保持代码的简洁性,并加上有效的 javadoc注释。尽量不要在接口里定义变量,如果一定夏定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。正例:接口方法签名: void f0;接口基础常量表示: String COMPANY="bonc;反例:接口方法定义: public abstract void f0说明:JDK8中接口允许有默认实现,那么这个 default方法,是对所有实现类都有价值的默认实现。13接口和实现类的命名有两套规则1)【强制】对于 Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用mpl的后缀与接口区别。正例: Cache Servicelmpl实现 Cacheservice接口。2)【推荐】如果是形容能力的接口名称,取对应的形容词做接口名(通常是-able的形式正例: AbstractTranslator实现 Translatable。14.【参考】枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。正例:枚举名字: Dealstatus enum;成员名称: SUCCESS/ UNKOWN REASON。15.【参考】各层命名规约:A) Service/DAO层方法命名规约1)获取单个对象的方法用get做前缀。2)获取多个对象的方法用it做前缀。3)获取统计值的方法用 count做前缀。4)插入的方法用save(推荐)或 insert做前缀。5)删除的方法用 remove(推荐)或 delete做前缀。6)修改的方法用 update做前缀。B)领域模型命名规约1)数据对象: XXXDO,XX即为数据表名2)数据传输对象: XXXDTO,xXX为业务领域相关的名称。3)展示对象:XxVO,XXX一般为网页名称4)POO是DO/DTO/BO∧VO的统称,禁止命名成ⅹ XPOJO。(2)、常量定义1.【强制】不允许出现仼何魔法值(即未经定义的常量)直接出现在代码中。反例: String key="ld# taobao"+ tradedcache put(key, value)2.【强制】long或者Long初始赋值时,必须使用大写的L,不能是小写的丨,小写容易跟数字1混淆,造成误解。说明: Long a=2写的是数字的21,还是Long型的2?3.【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如缓存相关的常量放在类: CacheConsts下:系统配置相关的常量放在类: Config Consts下。说明:大而全的常量类,非得ctr+f才定位到修改的常量,不利于理解,也不利于维护。4.【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。)跨应用共享常量∶放置在二方库中,通常是 client. jar中的 const目录下。2)应用内共享常量:放置在一方库的 modules中的 const目录下。反例焬懂变量也要统一定乂成应用内共享常量两位攻城师在两个类中分别定义了表示“是′的变量类A中: public static final String YES="yes类B中: public static final String YES="y";A. YES. equals(BYES),预期是true,但实际返回为 false,导致产生线上问题。3)子工程内部共享常量:即在当前子工程的 const目录下。4)包内共享常量:即在当前包下单独的 const目录下。5)类内共享常量:直接在类内部 private static final定义。5.【推荐】如果变量值仅在一个范围内变化用Enum类。如果还带有名称之外的延伸属性,必须使用Enum类,下面正例中的数字就是延伸信息,表示星期几。IE 15: public Enum( MONDAY(1), TUESDAY (2), WEDNESDAY(3), THURSDAY (4),FRIDAY(S, SATURDAY(6), SUNDAY(7); 3(3)、格式规约1.【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成即可,不需要换行;如果是非空代码块则1)左大括号前不换行。2)左大括号后换行。3)右大括号前换行。4)右大括号后还有else等代码则不换行;表示终止右大括号后必须换行。2.【强制】左括号和后一个字符之间不出现空格;同样,右括号和前一个字符之间也不出现空格。详见第5条下方正例提示。3.【强制】if/for∧ while/ switch/do等保留字与左右括号之间都必须加空格。4.【强制】任何运算符左右必须加一个空格。说明:运算符包括赋值运算符=、逻辑运算符&&、加減乘除符号、三目运行符等。5.【强制]代码块缩进4个空格,如果使用tab缩进,请设置成1个tab为4个空格。正例:(涉及1-5点)public static void main(String args[)∥/缩进4个空格String say= hello∥/运算符的左右必须有一个空格int flag=0∥/关键词i与括号之间必须有一个空格,括号内f与左括号,1与右括号不需要空格if(flag==0)(System. out. printIn(say)∥/左大括号前加空格且不换行;左大括号后换行if (flag== 1)System. out. printIn("world");∥/右大括号前换行,右大括号后有else,不用换行) elseSystem.out. print("ok )/右大括号作为结束,必须换行6.【强制】单行字符数限制不超过120个,超出需要换行,换行时,遵循如下原则1)换行时相对上一行缩进4个空格。2)运算符与下文一起换行。3)方法调用的点符号与下文一起换行。4)在多个参数超长,逗号后进行换行5)在括号前不要换行,见反例。正例String Buffer sb= new String Buffer//超过120个字符的情况下,换行缩进4个空格,并且方法前的点符号一起换行sb. append(zi) append(xin")append("huang");反例String Buffer sb= new String buffer/超过120个字符的情况下,不要在括号前换行sb. append("zi"). append("xin").append (huang )/参数很多的方法调用也超过120个字符,逗号后才是换行处method(args1, args, args3,., argsX)7.【强制】方法参数在定义和传入时,多个参数逗号后边必须加空格。正例:下例中实参的"a",后边必须要有一个空格。methoda,"b","c")8.【推荐】没有必要增加若干空格来使某一行的字符与上一行的相应字符对齐。正例:inta= 3:long b=4L,float c= 5eString Buffer sb new String buffer说明:增加sb这个变量,如果需要对齐,则给a、b、都要增加几个空格,在变量比较多的情况下,是一种累赘的事情。9.【强制】IDE的 text file encoding设置为UTF-8;DE中文件的换行符使用Unx格式,不要使用 windows格式10.【推荐】方法体內的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。说明:没有必要插入多行空格进行隔开。(4)、OOP规约【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。2.【强制】所有的覆写方法,必须加@ Override注解。反例: getobjecte0与 getobject0)的问题。一个是字母的O,个是数字的0,加@ Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。3.【强制】相同参数类型相同业务含义,才可以使用Java的可变参数避免使用 Object说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)IE5]: public User getUsers(String type, Integer.ids)4.【强制】对外暴露的接口签名,原则上不允许修改方法签名,避免对接口调用方产生影响接口过时必须加@ Deprecated注解,并清晰地说明采用的新接口或者新服务是什么。5.【强制】不能使用过时的类或方法。说明: java. net. URLDecoder中的方法 decode(string encodestr)这个方法已经过时,应该使用双参数 decode( String source, String encode)。接口提供倛方既然明确是过时接口那么有义务同时提供新的接口;作为调用方来说,有义务去考证过时方法的新实现是什么。6.【强制】 Object的 equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals正例:"test. equals( object;反例: object equals("test");说明:推荐使用java. util.Objects# equals(JDK7引入的工具类)7.【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals方法比较。说明:对于 nteger var=?在-128至127之间的赋值, Integer对象是在ntegerCache cache产生,会复用已有对象,这个区间内的 Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals方法进行判断。8.【强制】关于基本数据类型与包装数据类型的使用标准如下1)所有的POJO类属性必须使用包装数据类型。2)RPC方法的返回值和参数必须使用包装数据类型。3)所有的局部变量推荐使用基本数据类型。说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE问题,或者入库检查,都由使用者来保证正例:数据库的査询结果可能是ηu‖,因为自动拆箱,用基本数据类型接收有NPE风险。反例:某业务的交易报表上显示成交总额涨跌情况,即正负ⅹ%,ⅹ为基本数据类型,调用的RPC服务,调用不成功时,返回的是默认值,页面显示:0%,这是不合理的,应该显示成中划线。所以包装数据类型的nu值,能够表示额外的信息,如:远程调用失败,异常退出。9.【强制】定义DO/DTOO等POO类时,不要设定任何属性默认值。反例:某业务的DO的 gmtcreate默认值为 new Date;但是这个属性在数据提取时并没有置入具体值在更新其它字段时又附带更新了此字段导致创建时间被修改成当前时间。10.【强制】序列化类新增属性时,请不要修改 serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改 serialversionu|D值。说明:注意 serialversionUID不一致会抛出序列化运行时异常。11.【强制】构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。12.【强制】POo类必须写 toString方法。使用工具类 source> generate to String时,如果继承了另一个POO类,注意在前面加一下 super to String说明:在方法执行抛出异常时,可以直接调用PoJo的 toString(方法打印其属性值,便于排查问题。13.【推荐】使用索引访问用 String的 split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛 IndexOutofBoundsException的风险

编写代码编码规范

用户评论
请输入评论内容
评分:
暂无评论