序:团队开发有一套自己的命名规范,方便大家review和code,今天我总结一下,后面有需要用到的,可以直接按这套走。
命名规范
命名中不可出现拼音或者中英文混用的命名,为了方便大家理解。
1.包名
包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
采用反域名命名规则,全部使用小写字母。一级包名是顶级域名,通常为com,edu,gov,net,org等,二级包名为公司名,三级包名根据应用进行命名,四级包名为模块名或层级名。
注意:如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下。
2.类名
类名都以UpperCamelCase风格编写。
类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。
名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的, 比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。
测试类的命名以它要测试的类的名称开始,以Test结束。例如:HashTest或HashIntegrationTest。
接口(interface):命名规则与类一样采用大驼峰命名法,多以able或ible结尾,如
interface Runnable、interface Accessible。
注意:如果项目采用MVP,所有Model、View、Presenter的接口都以I为前缀,不加后缀,其他的接口采用上述命名规则。
3.方法名
方法名都以lowerCamelCase风格编写。
方法名通常是动词或动词短语。
4.常量名
常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词。
5.非常量名
非常量字段名以lowerCamelCase风格的基础上改造为如下风格:基本结构为scopeVariableNameType。
scope:范围
非公有,非静态字段命名以m开头。
静态字段命名以s开头。
公有非静态字段命名以p开头。
公有静态字段(全局变量)命名以g开头。
例子:
public class MyClass{
int mPackagePrivate;
private int mPrivate;
protected int mProtected;
private static MyClass sSingleton;
public int pField;
public static int gField;
}
使用1字符前缀来表示作用范围,1个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字母小写,这样保证了对变量名能够进行正确的断句。
6.参数名
参数名以lowerCamelCase风格编写。
参数应该避免用单个字符命名。
7.局部变量名
局部变量名以lowerCamelCase风格编写,比起其它类型的名称,局部变量名可以有更为宽松的缩写。
8.临时变量
临时变量通常被取名为i、j、k、m和n,它们一般用于整型;c、d、e,它们一般用于字符型。 如:for (int i = 0; i < len ; i++)。
9.类型变量名
类型变量可用以下两种风格之一进行命名:
单个的大写字母,后面可以跟一个数字(如:E,T,X,T2)。
以类命名方式(参考2.2 类名),后面加个大写的T(如:RequestT,FooBarT)。
更多还可参考~[阿里巴巴Java开发手册]
资源命名规范
1.资源布局文<XML文件>
全部采用小写下划线命名法。
a.contentView命名
必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
所有Activity或Fragment的contentView必须与其类名对应,对应规则为:将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
例如:activity_main.xml
b.Dialog命名
规则:dialog_描述.xml
例如:dialog_hint.xml
c.PopupWindow命名
规则:ppw_描述.xml
例如:ppw_info.xml
d. 列表项命名
规则:item_描述.xml
例如:item_city.xml
e.包含项命名
规则:模块_(位置)描述.xml
例如:activity_main_head.xml、activity_main_bottom.xml
注意:通用的包含项命名采用:项目名称缩写_描述.xml
例如:xxxx_title.xml
2.资源文件(图片drawable文件夹下)
全部小写,采用下划线命名法,加前缀区分
命名模式:可加后缀_small表示小图,_big表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:
用途_模块名_逻辑名称
用途_模块名_颜色
用途_逻辑名称
用途_颜色
例如:
如果有多种形态:如按钮选择器:btn_xx.xml(selector)
注意:使用AndroidStudio的插件SelectorChapek可以快速生成selector,前提是命名要规范。
3.动画文件(anim文件夹下)
全部小写,采用下划线命名法,加前缀区分。
具体动画采用以下规则:模块名_逻辑名称。
例如:refresh_progress.xml、market_cart_add.xml、market_cart_remove.xml。
4.values中name名称
a.colors的name命名使用下划线命名法,在你的colors.xml文件中应该只是映射颜色的名称一个ARGB值,而没有其它的。不要使用它为不同的按钮来定义ARGB值。
例子:
b.dimens也一样,要通用得去定义
例如:
c.strings.xml
strings的name命名使用下划线命名法,采用以下规则:模块名+逻辑名称。
d.styles.xml
几乎每个项目都需要适当的使用style文件,因为对于一个视图来说有一个重复的外观是很常见的,将所有的外观细节属性(colors、padding、font)放在style文件中。
5.layout中的id命名
命名模式为:view缩写_模块名_逻辑名,比如btn_main_search
使用AndroidStudio的插件ButterKnife Zelezny,生成注解非常方便,原生的话可以使用Android Code Generator插件
注释规范
1.类注释
具体可以在AS中自己配制,Settings → Editor → File and Code Templates → Includes → File Header,输入
/** *
* author : ${USER}
* e-mail : xxx@xx
* time : ${YEAR}/${MONTH}/${DAY}
* desc :
* version: 1.0
*
*/
2.方法注释
每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释,在方法前一行输入/** + 回车或者设置Fix doc comment(Settings → Keymap → Fix doc comment)快捷键,AS便会帮你生成模板,我们只需要补全参数即可。
开发其他规范参考
1.合理布局,有效运用、、标签;
2.Activity和Fragment里面有许多重复的操作以及操作步骤,所以我们都需要提供一个BaseActivity和BaseFragment,让所有的Activity和Fragment都继承这个基类。
3.方法基本上都按照调用的先后顺序在各自区块中排列;
4.相关功能作为小区块放在一起(或者封装掉);
5.当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法;
5.数据提供统一的入口。无论是在 MVP、MVC 还是 MVVM 中,提供一个统一的数据入口,都可以让代码变得更加易于维护。比如可使用一个DataManager,把http、preference、eventpost、database都放在DataManger里面进行操作,我们只需要与DataManger打交道;
6.多用组合, 少用继承;
7.提取方法, 去除重复代码。对于必要的工具类抽取也很重要,这在以后的项目中是可以重用的。
8.可引入 Dagger2 减少模块之间的耦合性。Dagger2 是一个依赖注入框架,使用代码自动生成创建依赖关系需要的代码。减少很多模板化的代码,更易于测试,降低耦合,创建可复用可互换的模块;
9.项目引入RxJava+RxAndroid这些响应式编程,可以极大的减少逻辑代码;
10.通过引入事件总线,如:EventBus、AndroidEventBus、RxBus,它允许我们在DataLayer中发送事件,以便ViewLayer中的多个组件都能够订阅到这些事件,减少回调;
11.使用AS自带的Lint来优化代码结构(什么,你不会?右键module、目录或者文件,选择Analyze → Inspect Code);
12.最后不要忘了内存泄漏的检测;