序:團(tuán)隊(duì)開(kāi)發(fā)有一套自己的命名規(guī)范成福,方便大家review和code芳肌,今天我總結(jié)一下灵再,后面有需要用到的肋层,可以直接按這套走。
命名規(guī)范
命名中不可出現(xiàn)拼音或者中英文混用的命名翎迁,為了方便大家理解槽驶。
1.包名
包名全部小寫(xiě),連續(xù)的單詞只是簡(jiǎn)單地連接起來(lái)鸳兽,不使用下劃線。
采用反域名命名規(guī)則罕拂,全部使用小寫(xiě)字母揍异。一級(jí)包名是頂級(jí)域名,通常為com,edu,gov,net,org等爆班,二級(jí)包名為公司名衷掷,三級(jí)包名根據(jù)應(yīng)用進(jìn)行命名,四級(jí)包名為模塊名或?qū)蛹?jí)名柿菩。
注意:如果項(xiàng)目采用MVP戚嗅,所有M、V枢舶、P抽取出來(lái)的接口都放置在相應(yīng)模塊的i包下懦胞,所有的實(shí)現(xiàn)都放置在相應(yīng)模塊的impl下。
2.類(lèi)名
類(lèi)名都以UpperCamelCase風(fēng)格編寫(xiě)凉泄。
類(lèi)名通常是名詞或名詞短語(yǔ)躏尉,接口名稱(chēng)有時(shí)可能是形容詞或形容詞短語(yǔ)。現(xiàn)在還沒(méi)有特定的規(guī)則或行之有效的約定來(lái)命名注解類(lèi)型后众。
名詞胀糜,采用大駝峰命名法,盡量避免縮寫(xiě)蒂誉,除非該縮寫(xiě)是眾所周知的教藻, 比如HTML,URL,如果類(lèi)名稱(chēng)中包含單詞縮寫(xiě)右锨,則單詞縮寫(xiě)的每個(gè)字母均應(yīng)大寫(xiě)括堤。
測(cè)試類(lèi)的命名以它要測(cè)試的類(lèi)的名稱(chēng)開(kāi)始,以Test結(jié)束绍移。例如:HashTest或HashIntegrationTest痊臭。
接口(interface):命名規(guī)則與類(lèi)一樣采用大駝峰命名法,多以able或ible結(jié)尾登夫,如
interface Runnable广匙、interface Accessible。
注意:如果項(xiàng)目采用MVP恼策,所有Model鸦致、View潮剪、Presenter的接口都以I為前綴,不加后綴分唾,其他的接口采用上述命名規(guī)則趴樱。
3.方法名
方法名都以lowerCamelCase風(fēng)格編寫(xiě)。
方法名通常是動(dòng)詞或動(dòng)詞短語(yǔ)亭罪。
4.常量名
常量名命名模式為CONSTANT_CASE歧沪,全部字母大寫(xiě),用下劃線分隔單詞折砸。
5.非常量名
非常量字段名以lowerCamelCase風(fēng)格的基礎(chǔ)上改造為如下風(fēng)格:基本結(jié)構(gòu)為scopeVariableNameType看疗。
scope:范圍
非公有,非靜態(tài)字段命名以m開(kāi)頭睦授。
靜態(tài)字段命名以s開(kāi)頭两芳。
公有非靜態(tài)字段命名以p開(kāi)頭。
公有靜態(tài)字段(全局變量)命名以g開(kāi)頭去枷。
例子:
public class MyClass{
int mPackagePrivate;
private int mPrivate;
protected int mProtected;
private static MyClass sSingleton;
public int pField;
public static int gField;
}
使用1字符前綴來(lái)表示作用范圍怖辆,1個(gè)字符的前綴必須小寫(xiě),前綴后面是由表意性強(qiáng)的一個(gè)單詞或多個(gè)單詞組成的名字删顶,而且每個(gè)單詞的首寫(xiě)字母大寫(xiě)竖螃,其它字母小寫(xiě),這樣保證了對(duì)變量名能夠進(jìn)行正確的斷句逗余。
6.參數(shù)名
參數(shù)名以lowerCamelCase風(fēng)格編寫(xiě)斑鼻。
參數(shù)應(yīng)該避免用單個(gè)字符命名。
7.局部變量名
局部變量名以lowerCamelCase風(fēng)格編寫(xiě)猎荠,比起其它類(lèi)型的名稱(chēng)坚弱,局部變量名可以有更為寬松的縮寫(xiě)。
8.臨時(shí)變量
臨時(shí)變量通常被取名為i关摇、j荒叶、k、m和n输虱,它們一般用于整型些楣;c、d宪睹、e愁茁,它們一般用于字符型。 如:for (int i = 0; i < len ; i++)亭病。
9.類(lèi)型變量名
類(lèi)型變量可用以下兩種風(fēng)格之一進(jìn)行命名:
單個(gè)的大寫(xiě)字母鹅很,后面可以跟一個(gè)數(shù)字(如:E,T,X,T2)。
以類(lèi)命名方式(參考2.2 類(lèi)名)罪帖,后面加個(gè)大寫(xiě)的T(如:RequestT,FooBarT)促煮。
更多還可參考~[阿里巴巴Java開(kāi)發(fā)手冊(cè)]
資源命名規(guī)范
1.資源布局文<XML文件>
全部采用小寫(xiě)下劃線命名法邮屁。
a.contentView命名
必須以全部單詞小寫(xiě),單詞間以下劃線分割菠齿,使用名詞或名詞詞組佑吝。
所有Activity或Fragment的contentView必須與其類(lèi)名對(duì)應(yīng),對(duì)應(yīng)規(guī)則為:將所有字母都轉(zhuǎn)為小寫(xiě)绳匀,將類(lèi)型和功能調(diào)換(也就是后綴變前綴)芋忿。
例如:activity_main.xml
b.Dialog命名
規(guī)則:dialog_描述.xml
例如:dialog_hint.xml
c.PopupWindow命名
規(guī)則:ppw_描述.xml
例如:ppw_info.xml
d. 列表項(xiàng)命名
規(guī)則:item_描述.xml
例如:item_city.xml
e.包含項(xiàng)命名
規(guī)則:模塊_(位置)描述.xml
例如:activity_main_head.xml、activity_main_bottom.xml
注意:通用的包含項(xiàng)命名采用:項(xiàng)目名稱(chēng)縮寫(xiě)_描述.xml
例如:xxxx_title.xml
2.資源文件(圖片drawable文件夾下)
全部小寫(xiě)疾棵,采用下劃線命名法戈钢,加前綴區(qū)分
命名模式:可加后綴_small表示小圖,_big表示大圖陋桂,邏輯名稱(chēng)可由多個(gè)單詞加下劃線組成,采用以下規(guī)則:
用途_模塊名_邏輯名稱(chēng)
用途_模塊名_顏色
用途_邏輯名稱(chēng)
用途_顏色
例如:
如果有多種形態(tài):如按鈕選擇器:btn_xx.xml(selector)
注意:使用AndroidStudio的插件SelectorChapek可以快速生成selector蝶溶,前提是命名要規(guī)范嗜历。
3.動(dòng)畫(huà)文件(anim文件夾下)
全部小寫(xiě),采用下劃線命名法抖所,加前綴區(qū)分梨州。
具體動(dòng)畫(huà)采用以下規(guī)則:模塊名_邏輯名稱(chēng)。
例如:refresh_progress.xml田轧、market_cart_add.xml暴匠、market_cart_remove.xml。
4.values中name名稱(chēng)
a.colors的name命名使用下劃線命名法傻粘,在你的colors.xml文件中應(yīng)該只是映射顏色的名稱(chēng)一個(gè)ARGB值每窖,而沒(méi)有其它的。不要使用它為不同的按鈕來(lái)定義ARGB值弦悉。
例子:
b.dimens也一樣窒典,要通用得去定義
例如:
c.strings.xml
strings的name命名使用下劃線命名法,采用以下規(guī)則:模塊名+邏輯名稱(chēng)稽莉。
d.styles.xml
幾乎每個(gè)項(xiàng)目都需要適當(dāng)?shù)氖褂胹tyle文件瀑志,因?yàn)閷?duì)于一個(gè)視圖來(lái)說(shuō)有一個(gè)重復(fù)的外觀是很常見(jiàn)的,將所有的外觀細(xì)節(jié)屬性(colors污秆、padding劈猪、font)放在style文件中。
5.layout中的id命名
命名模式為:view縮寫(xiě)_模塊名_邏輯名良拼,比如btn_main_search
使用AndroidStudio的插件ButterKnife Zelezny战得,生成注解非常方便,原生的話可以使用Android Code Generator插件
注釋規(guī)范
1.類(lèi)注釋
具體可以在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.方法注釋
每一個(gè)成員方法(包括自定義成員方法痛黎、覆蓋方法、屬性方法)的方法頭都必須做方法頭注釋?zhuān)诜椒ㄇ耙恍休斎?** + 回車(chē)或者設(shè)置Fix doc comment(Settings → Keymap → Fix doc comment)快捷鍵刮吧,AS便會(huì)幫你生成模板湖饱,我們只需要補(bǔ)全參數(shù)即可。
開(kāi)發(fā)其他規(guī)范參考
1.合理布局杀捻,有效運(yùn)用井厌、、標(biāo)簽致讥;
2.Activity和Fragment里面有許多重復(fù)的操作以及操作步驟仅仆,所以我們都需要提供一個(gè)BaseActivity和BaseFragment,讓所有的Activity和Fragment都繼承這個(gè)基類(lèi)垢袱。
3.方法基本上都按照調(diào)用的先后順序在各自區(qū)塊中排列墓拜;
4.相關(guān)功能作為小區(qū)塊放在一起(或者封裝掉);
5.當(dāng)一個(gè)類(lèi)有多個(gè)構(gòu)造函數(shù)请契,或是多個(gè)同名方法咳榜,這些函數(shù)/方法應(yīng)該按順序出現(xiàn)在一起,中間不要放進(jìn)其它函數(shù)/方法爽锥;
5.數(shù)據(jù)提供統(tǒng)一的入口涌韩。無(wú)論是在 MVP、MVC 還是 MVVM 中氯夷,提供一個(gè)統(tǒng)一的數(shù)據(jù)入口臣樱,都可以讓代碼變得更加易于維護(hù)。比如可使用一個(gè)DataManager腮考,把http雇毫、preference、eventpost踩蔚、database都放在DataManger里面進(jìn)行操作嘴拢,我們只需要與DataManger打交道;
6.多用組合, 少用繼承寂纪;
7.提取方法, 去除重復(fù)代碼席吴。對(duì)于必要的工具類(lèi)抽取也很重要,這在以后的項(xiàng)目中是可以重用的捞蛋。
8.可引入 Dagger2 減少模塊之間的耦合性孝冒。Dagger2 是一個(gè)依賴(lài)注入框架,使用代碼自動(dòng)生成創(chuàng)建依賴(lài)關(guān)系需要的代碼拟杉。減少很多模板化的代碼庄涡,更易于測(cè)試,降低耦合搬设,創(chuàng)建可復(fù)用可互換的模塊穴店;
9.項(xiàng)目引入RxJava+RxAndroid這些響應(yīng)式編程撕捍,可以極大的減少邏輯代碼;
10.通過(guò)引入事件總線泣洞,如:EventBus忧风、AndroidEventBus、RxBus球凰,它允許我們?cè)贒ataLayer中發(fā)送事件狮腿,以便ViewLayer中的多個(gè)組件都能夠訂閱到這些事件,減少回調(diào)呕诉;
11.使用AS自帶的Lint來(lái)優(yōu)化代碼結(jié)構(gòu)(什么缘厢,你不會(huì)?右鍵module甩挫、目錄或者文件贴硫,選擇Analyze → Inspect Code);
12.最后不要忘了內(nèi)存泄漏的檢測(cè)伊者;