Android app编码规范

一.命名规范

1.1.命名原则

1.所有编程相关命名严禁使用拼音头字母缩写

2.所有编程相关命名严禁使用不规范的英文缩写

3.所有编程相关命名严禁使用拼音与英文混合的方式!

4.所有编程相关命名严禁使用下划线或美元符号开始,或者以下划线或美元符号结束

1.2.包名

1.2.1.命名规则

1)小写

2)单数(包名单词统一使用单数形式)

3)点分隔符之间有且仅有一个自然语义的英语单词

1.2.2.命名首前缀

1)application(app):com(公司项目)

2)业务层module:项目名

3)底层library:library(底层类库)

1.2.3.命名顺序

1)application(app):com(公司项目).cnecloud(公司域名). power(项目名)

2)业务层module:power(项目名).module(业务层module).业务名

       例如:power.module.warning;power.module.station;

3)底层library:library(底层类库).功能名

       例如:library.base;library.common;

1.2.4.分包原则:高内聚性,模块化,低偶合。

用包来体现特性集。把所有相关某一特性(且仅特性相关)的项放入一个包中。这样包的内聚性高,模块化程度高,包之间偶合度低。紧密相关的项放在一起,没有分散到整个应用程序中。代码的所有权会更容易组织,也更容易被模块化,高复用性。

1.3.类名

1.3.1.命名规则

1)驼峰形式(UpperCamelCase)

2)特殊命名:(领域模型的相关命名)DO / DTO / VO / DAO等。

3)接口命名:以大写字母“I”开头,代表interface

4)抽象类命名:以“Abstract”或“Base”开头

5)实现类命名:以“Impl”/“Implement”结尾;或者以具体业务单词命名。(可选)

6)枚举类命名:以“Enum”结尾,枚举成员名称需要全大写。

7)设计模式类命名:如果使用到了设计模式,建议在类名中体现出具体模式。将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。

例如:

       public class OrderFactory; public class LoginProxy; public class ResourceObserver;

1.3.2.命名顺序

项目统一采用类别后缀形式命名:

即:业务名 + 类别名

举例:LoginActivity;LoginRequest;WarningListEvent;WarningDetailBean

1.4.方法名

1.4.1.命名规则

1)方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。

2)接口类中的方法和属性不要加任何修饰符号(public 也不要加)。

1.4.2.mvp接口方法命名

1)P到V的数据回调接口:on + 业务名(可选) + 数据名 + Result(int responseCode, Bean data)模仿onActivityResult命名规则

2)P命令V执行操作接口:do + 动作名(Show,Refresh……) + 动作对象(Dialog,ListView,Layout)(Params……)

3)P开放给V的业务处理接口:do + 动作名(Get,Post,Save……)(可先) + 业务名(可选) + 业务对象数据名(可选)(Params……)

1.5.变量名

       成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。

1.6.常量名

       1)常量命名全部大写,单词间用下划线隔开

2)常量名严禁缩写表示,单词必须表达完整

       2)严禁出现任何未经定义的常量直接出现在代码中String key="Id#taobao_"+tradeId;

       3)long或者Long初始赋值时,必须使用大写的L,不能是小写的l

       4)不推荐使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。

常量复用层次:

(1)跨应用共享常量

(2)应用内共享常量

(3)module内共享常量

(4)pacakge(包)内共享常量

(5)class(类)内共享常量

二.注释规范

2.1.注释原则

1)全英文 / 全中文注释(按app统一标准)

2)library要求必须全英文注释(跨应用共享)

3)类注释,属性注释,类方法注释缺一不可

2.2.格式要求

1)类注释

@author:类作者

@ version:版本号

@ description:类功能描述

/**
 * @author Created by ASUS on 2019/2/26.
 * @version 1.0
 * @description
 
*/

2)属性注释

/**

 * 属性定义,默认值

 */

3)方法注释

@ description:方法功能描述

@ param:参数定义

@ return:返回值描述

/**

 * 普通网络请求

 * @param observable    from service api

 * @param observer      ui thread observer

 * @param retryFunction retry function

 * @param transformer   thread transformer

 * @param            data

 * @return int

 */

4)代码块单行注释

在被注释语句上方另起一行,使用//注释。

// 代码行描述

5)代码块多行注释

方法内部多行注释使用/* */注释,注意与代码对齐。

例如:

       /* about cookie save cookies at local */

       if (null != request.mContext && AsyncHttpUtil.isNeedCookie()) {

              CookieUtils.setCookies(CookieUtils.getCookie(request.mContext));

       }

6)代码迭代注释

(1)修改代码前后另起一行注释,说明修改作者,日期,需求,注意事项等等。

例如:

// modified by qiang.hou on 2016/07/03 for send response message to UI thread begins

…………………………………………

// modified by qiang.hou on 2016/07/03 for send response message to UI thread ends

(2)添加代码前后另起一行注释,说明修改作者,日期,需求,注意事项等等。

例如:

// added by qiang.hou on 2016/07/03 for send response message to UI thread begins

…………………………………………

// added by qiang.hou on 2016/07/03 for send response message to UI thread ends

(3)删除代码前后另起一行注释,说明修改作者,日期,需求,注意事项等等。

// deleted by qiang.hou on 2016/07/03 for send response message to UI thread begins

…………………………………………

// deleted by qiang.hou on 2016/07/03 for send response message to UI thread ends

7)枚举类型注释

要求说明每个字段的用途,默认值

/**

 * 字段定义,默认值

 */

8)注释掉的代码块

说明该代码块原功能,注释作者,注释时间,注释动机等等,以及后期是否恢复使用。

// deleted by qiang.hou on 2016/07/03 for send response message to UI thread begins

…………………………………………

// deleted by qiang.hou on 2016/07/03 for send response message to UI thread ends

三.OOP规范

3.1.方法可变参数使用

相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。可变参数必须放置在参数列表的最后。

3.2.不建议使用过时的类或方法

3.3.对象equals方法

所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较,需内部重定义equals方法。

3.4.构造方法里面禁止加入任何业务逻辑

如果有初始化逻辑,请放在create或者init方法中

3.5.静态变量/方法调用

需要访问类的静态变量和静态方法时候,必须直接使用类名直接访问,否则无谓增加编译器解析成本。

3.6.空指针预判

在任何不百分百确定对象有值的情况下,在调用对象的属性或者方法之前,必须添加空指针预判代码。

原则就是不允许由空指针导致的crash出现。

3.7.final声明

final可提高程序响应效率。以下情况下推荐使用final声明。

1) 不需要重新赋值的变量,包括类属性、局部变量。

2) 对象参数前加final,表示不允许修改引用的指向。

3) 类方法确定不允许被重写。

3.8.访问控制

任何类、方法、参数、变量等必须严控访问范围。过宽泛的访问范围,不利于模块解耦。

1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。

2) 工具类不允许有public或default构造方法。

3) 类非static成员变量并且与子类共享,必须是protected。

4) 类非static成员变量并且仅在本类使用,必须是private。

5) 类static成员变量如果仅在本类使用,必须是private。

6) 若是static成员变量,必须考虑是否为final。

7) 类成员方法只供类内部调用,必须是private。

8) 类成员方法只对继承类公开,那么限制为protected。

3.9.慎用对象的clone方法

方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝。请参照 深拷贝/浅拷贝。

3.10.String和StringBuffer

对象需要循环叠加的,循环体内,字符串的联接方式,使用StringBuilder的append方法进行扩展。

3.11.类内方法定义顺序

推荐:公有方法或保护方法 > 私有方法 > getter/setter方法。

3.12.强制重写JavaBean类的toString()方法

3.13.接口内变量

尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。

3.14.其他

多子类复用方法,属性需抽象定义(接口,抽象类)。编码原则:高内聚性,组件化,低偶合!!!

你可能感兴趣的:(Android,基础知识)