1.所有编程相关命名严禁使用拼音头字母缩写!
2.所有编程相关命名严禁使用不规范的英文缩写!
3.所有编程相关命名严禁使用拼音与英文混合的方式!
4.所有编程相关命名严禁使用下划线或美元符号开始,或者以下划线或美元符号结束!
1)小写
2)单数(包名单词统一使用单数形式)
3)点分隔符之间有且仅有一个自然语义的英语单词
1)application(app):com(公司项目)
2)业务层module:项目名
3)底层library:library(底层类库)
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)驼峰形式(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;
项目统一采用类别后缀形式命名:
即:业务名 + 类别名
举例:LoginActivity;LoginRequest;WarningListEvent;WarningDetailBean
1)方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。
2)接口类中的方法和属性不要加任何修饰符号(public 也不要加)。
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……)
成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。
1)常量命名全部大写,单词间用下划线隔开
2)常量名严禁缩写表示,单词必须表达完整
2)严禁出现任何未经定义的常量直接出现在代码中String key="Id#taobao_"+tradeId;
3)long或者Long初始赋值时,必须使用大写的L,不能是小写的l
4)不推荐使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。
常量复用层次:
(1)跨应用共享常量
(2)应用内共享常量
(3)module内共享常量
(4)pacakge(包)内共享常量
(5)class(类)内共享常量
1)全英文 / 全中文注释(按app统一标准)
2)library要求必须全英文注释(跨应用共享)
3)类注释,属性注释,类方法注释缺一不可
@author:类作者
@ version:版本号
@ description:类功能描述
/**
* @author Created by ASUS on 2019/2/26.
* @version 1.0
* @description
*/
/** * 属性定义,默认值 */
@ description:方法功能描述
@ param:参数定义
@ return:返回值描述
/** * 普通网络请求 * @param observable from service api * @param observer ui thread observer * @param retryFunction retry function * @param transformer thread transformer * @paramdata * @return int */
在被注释语句上方另起一行,使用//注释。
// 代码行描述
方法内部多行注释使用/* */注释,注意与代码对齐。
例如:
/* about cookie save cookies at local */
if (null != request.mContext && AsyncHttpUtil.isNeedCookie()) {
CookieUtils.setCookies(CookieUtils.getCookie(request.mContext));
}
(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
要求说明每个字段的用途,默认值
/** * 字段定义,默认值 */
说明该代码块原功能,注释作者,注释时间,注释动机等等,以及后期是否恢复使用。
// 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
相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。可变参数必须放置在参数列表的最后。
所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较,需内部重定义equals方法。
如果有初始化逻辑,请放在create或者init方法中
需要访问类的静态变量和静态方法时候,必须直接使用类名直接访问,否则无谓增加编译器解析成本。
在任何不百分百确定对象有值的情况下,在调用对象的属性或者方法之前,必须添加空指针预判代码。
原则就是不允许由空指针导致的crash出现。
final可提高程序响应效率。以下情况下推荐使用final声明。
1) 不需要重新赋值的变量,包括类属性、局部变量。
2) 对象参数前加final,表示不允许修改引用的指向。
3) 类方法确定不允许被重写。
任何类、方法、参数、变量等必须严控访问范围。过宽泛的访问范围,不利于模块解耦。
1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。
2) 工具类不允许有public或default构造方法。
3) 类非static成员变量并且与子类共享,必须是protected。
4) 类非static成员变量并且仅在本类使用,必须是private。
5) 类static成员变量如果仅在本类使用,必须是private。
6) 若是static成员变量,必须考虑是否为final。
7) 类成员方法只供类内部调用,必须是private。
8) 类成员方法只对继承类公开,那么限制为protected。
方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝。请参照 深拷贝/浅拷贝。
对象需要循环叠加的,循环体内,字符串的联接方式,使用StringBuilder的append方法进行扩展。
推荐:公有方法或保护方法 > 私有方法 > getter/setter方法。
尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。
多子类复用方法,属性需抽象定义(接口,抽象类)。编码原则:高内聚性,组件化,低偶合!!!