來(lái)源:yjhmily - BlogJava
一、規(guī)范存在的意義
應(yīng)用編碼規(guī)范對(duì)于軟件本身和軟件開(kāi)發(fā)人員而言尤為重要,有以下幾個(gè)原因:
1、好的編碼規(guī)范可以盡可能的減少一個(gè)軟件的維護(hù)成本 , 并且?guī)缀鯖](méi)有任何一個(gè)軟件,在其整個(gè)生命周期中,均由最初的開(kāi)發(fā)人員來(lái)維護(hù);
2、好的編碼規(guī)范可以改善軟件的可讀性,可以讓開(kāi)發(fā)人員盡快而徹底地理解新的代碼;
3、好的編碼規(guī)范可以最大限度的提高團(tuán)隊(duì)開(kāi)發(fā)的合作效率;
4、長(zhǎng)期的規(guī)范性編碼還可以讓開(kāi)發(fā)人員養(yǎng)成好的編碼習(xí)慣,甚至鍛煉出更加嚴(yán)謹(jǐn)?shù)乃季S;
二、命名規(guī)范
1、一般概念
1、盡量使用完整的英文描述符
2、采用適用于相關(guān)領(lǐng)域的術(shù)語(yǔ)
3、采用大小寫(xiě)混合使名字可讀
4、盡量少用縮寫(xiě),但如果用了,必須符合整個(gè)工程中的統(tǒng)一定義
5、避免使用長(zhǎng)的名字(小于 15 個(gè)字母為正常選擇)
6、避免使用類(lèi)似的名字,或者僅僅是大小寫(xiě)不同的名字
7、避免使用下劃線(除靜態(tài)常量等)
2、標(biāo)識(shí)符類(lèi)型說(shuō)明
1、包( Package )的命名
Package 的名字應(yīng)該采用完整的英文描述符,都是由一個(gè)小寫(xiě)單詞組成。并且包名的前綴總是一個(gè)頂級(jí)域名,
通常是 com、edu、gov、mil、net、org 等;
如: com.yjhmily.test
2、類(lèi)( Class )的命名
類(lèi)名應(yīng)該是個(gè)一名詞,采用大小寫(xiě)混合的方式,每個(gè)單詞的首字母大寫(xiě)。盡量保證類(lèi)名簡(jiǎn)潔而富于描述。
使用完整單詞,避免縮寫(xiě)詞 ( 除非工程內(nèi)有統(tǒng)一縮寫(xiě)規(guī)范或該縮寫(xiě)詞被更廣泛使用,像 URL , HTML)
如: FileDescription
3、接口( Interface )的命名
基本與 Class 的命名規(guī)范類(lèi)似。在滿足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開(kāi)頭第一個(gè)字母為 ”I”,
便于與普通的 Class區(qū)別開(kāi)。其實(shí)現(xiàn)類(lèi)名稱(chēng)取接口名的第二個(gè)字母到最后,且滿足類(lèi)名的命名規(guī)范;
如: IMenuEngine
4、枚舉( Enum )的命名
基本與 Class 的命名規(guī)范類(lèi)似。在滿足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開(kāi)頭第一個(gè)字母為 ”E” ,
便于與普通的 Class區(qū)別開(kāi)。
如: EUserRole
5、異常( Exception )的命名
異常( Exception ) 通常采用字母 e 表示異常,對(duì)于自定義的異常類(lèi),其后綴必須為 Exception
如: BusinessException
6、方法( Method )的命名
方法名是一個(gè)動(dòng)詞,采用大小寫(xiě)混合的方式,第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。
方法名盡可能的描述出該方法的動(dòng)作行為。返回類(lèi)型為 Boolean 值的方法一般由“ is ”或“ has ”來(lái)開(kāi)頭
如: getCurrentUser() 、 addUser() 、 hasAuthority()
7、參數(shù)( Param )的命名
第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。參數(shù)量名不允許以下劃線或美元符號(hào)開(kāi)頭,
雖然這在語(yǔ)法上是允許的。參數(shù)名應(yīng)簡(jiǎn)短且富于描述。
如: public UserContext getLoginUser(String loginName);
8、常量字段 ( Constants )的命名
靜態(tài)常量字段( static final ) 全部采用大寫(xiě)字母,單詞之間用下劃線分隔;
如: public static final Long FEEDBACK;
public static Long USER_STATUS;
三、注釋規(guī)范
一個(gè)很好的可遵循的有關(guān)注釋的經(jīng)驗(yàn)法則是:
問(wèn)問(wèn)你自己,你如果從未見(jiàn)過(guò)這段代碼,要在合理的時(shí)間內(nèi)有效地明白這段代碼,你需要一些什么信息???
1、一般概念
1、注釋?xiě)?yīng)該增加代碼的清晰度
2、保持注釋的簡(jiǎn)潔
3、在寫(xiě)代碼之前或同時(shí)寫(xiě)注釋
4、注釋出為什么做了一些事,而不僅僅是做了什么
2、注釋哪些部分
1、Java 文件:必須寫(xiě)明版權(quán)信息以及該文件的創(chuàng)建時(shí)間和作者;
2、類(lèi):類(lèi)的目的、即類(lèi)所完成的功能,以及該類(lèi)創(chuàng)建的時(shí)間和作者名稱(chēng);多人一次編輯或修改同一個(gè)類(lèi)時(shí),
應(yīng)在作者名稱(chēng)處出現(xiàn)多人的名稱(chēng);
3、接口: 在滿足類(lèi)注釋的基礎(chǔ)之上,接口注釋?xiě)?yīng)該包含設(shè)置接口的目的、它應(yīng)如何被使用以及如何不被使用。
在接口注釋清楚的前提下對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)可以不加注釋?zhuān)?br />
4、方法注釋?zhuān)?對(duì)于設(shè)置 (Set 方法 ) 與獲取 (Get 方法 ) 成員的方法,在成員變量已有說(shuō)明的情況下,
可以不加注釋?zhuān)黄胀ǔ蓡T方法要求說(shuō)明完成什么功能,參數(shù)含義是什么且返回值什么;另外方法的創(chuàng)建
時(shí)間必須注釋清楚,為將來(lái)的維護(hù)和閱讀提供寶貴線索;
5、方法內(nèi)部注釋?zhuān)?控制結(jié)構(gòu),代碼做了些什么以及為什么這樣做,處理順序等,特別是復(fù)雜的邏輯處理部分,
要盡可能的給出詳細(xì)的注釋?zhuān)?br />
6、參數(shù): 參數(shù)含義、及其它任何約束或前提條件;
7、屬性: 字段描述;
8、局部 ( 中間 ) 變量: 無(wú)特別意義的情況下不加注釋?zhuān)?br />
3、注釋格式
遵循工程規(guī)定的統(tǒng)一注釋格式,一般情況下會(huì)以 codetemplates.xml 格式的文件導(dǎo)入 IDE(Eclipse)
或者用Eclipse默認(rèn)的;
四、代碼格式規(guī)范
遵循工程規(guī)定的統(tǒng)一代碼格式,一般情況下直接使用 IDE(Eclipse) 自帶的默認(rèn)代碼格式對(duì)代碼進(jìn)行格式化;
五、其他規(guī)范
JSP 文件命名
采用完整的英文描述說(shuō)明 JSP 所完成的功能,盡可能包括一個(gè)生動(dòng)的動(dòng)詞,第一個(gè)字母小寫(xiě),
如: viewMessage.jsp 、editUser.jsp 等。
六、工程特有命名規(guī)范
1、持久層
1、 Hibernate 映射文件及實(shí)體
與數(shù)據(jù)庫(kù)表名稱(chēng)完全對(duì)應(yīng);
如: Advertisement.hbm.xml 、 Advertisement.java
2、數(shù)據(jù)訪問(wèn) DAO
DAO 接口和實(shí)現(xiàn)類(lèi)名稱(chēng)必須完全符合正常接口和實(shí)現(xiàn)類(lèi)的命名規(guī)則,且最后以 ”DAO” 結(jié)尾
DAO 內(nèi)的數(shù)據(jù)訪問(wèn)方法必須足夠抽象的描述出對(duì)數(shù)據(jù)庫(kù)的基本 CRUD 操作;
如: ICrossAdDAO( 接口 ) 、 CrossAdDAO( 實(shí)現(xiàn)類(lèi) )
3、各種操作數(shù)據(jù)庫(kù)的 HQL 配置文件
HQL 文件的個(gè)數(shù)原則上與系統(tǒng)的 Services 層的服務(wù)個(gè)數(shù)相等,且以服務(wù)名稱(chēng)命名 HQL 文件;
如: resource.hbm.xml
2、服務(wù)層
1、服務(wù)接口和實(shí)現(xiàn)
服務(wù)接口和實(shí)現(xiàn)類(lèi)必須完全符合正常接口和實(shí)現(xiàn)類(lèi)的命名規(guī)則;以工程定義的服務(wù)名為主體,
并統(tǒng)一以 ”Serv” 結(jié)尾
如: IResourceServ( 服務(wù)接口 ) 、 ResourceServ( 接口實(shí)現(xiàn)類(lèi) )
2、服務(wù)接口方法
方法名是一個(gè)動(dòng)詞,采用大小寫(xiě)混合的方式,第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。
方法名盡可能的描述出該方法的動(dòng)作行為。
返回類(lèi)型為 Boolean 值:用“ is ”或“ has ”來(lái)開(kāi)頭
得到某數(shù)據(jù): get+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型;
得到所有數(shù)據(jù): get+All+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型;
通過(guò) XXX 得到 / 查詢某數(shù)據(jù): get/query+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型 +By+ 條件;
添加某數(shù)據(jù): save/add+ 數(shù)據(jù)描述名詞 ()
更新某數(shù)據(jù): save/update+ 數(shù)據(jù)描述名詞;
刪除某數(shù)據(jù): delete/remove+ 數(shù)據(jù)描述名詞;
3、業(yè)務(wù)對(duì)象
業(yè)務(wù)名稱(chēng) +BO
4、查詢參數(shù)對(duì)象
凡是繼承 Abst***QuerySpec 的查詢參數(shù)類(lèi)全部滿足以下規(guī)則:
Query+ 所要查詢的數(shù)據(jù)描述名詞 +Spec
作為參數(shù)傳入時(shí),參數(shù)名必須為:所要查詢的數(shù)據(jù)描述名詞 +Spec
如: QueryProgramSpec
3、MVC 層
1、Action 控制層
Action 類(lèi)名:功能模塊名稱(chēng) +Action ;
Actoin 方法名稱(chēng)盡可能的描述出頁(yè)面遷移的去向
如: LoginAction( 登錄用 action) , toWelcome( 轉(zhuǎn)向歡迎頁(yè)的 action 方法 )
2、資源文件
系統(tǒng)全局資源文件: globalMessages_+ 字符編碼類(lèi)型 +.properties
功能模塊內(nèi)部的資源文件: package.properties
4、Spring 配置文件
1、Action 相關(guān)配置文件
文件目錄: WebRoot/WEB-INF/spring/action/ 功能模塊名稱(chēng) +_ApplicationContext.xml
2、Services 相關(guān)配置文件
文件目錄: WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml
3、全局性配置文件
文件目錄: WebRoot/WEB-INF/spring/工程名+_ApplicationContext.xml
5、JSP 文件
采用完整的英文描述說(shuō)明 JSP 所完成的功能,盡可能包括一個(gè)生動(dòng)的動(dòng)詞,第一個(gè)字母小寫(xiě),
如: viewMessage.jsp 、editUser.jsp 等。
一、規(guī)范存在的意義
應(yīng)用編碼規(guī)范對(duì)于軟件本身和軟件開(kāi)發(fā)人員而言尤為重要,有以下幾個(gè)原因:
1、好的編碼規(guī)范可以盡可能的減少一個(gè)軟件的維護(hù)成本 , 并且?guī)缀鯖](méi)有任何一個(gè)軟件,在其整個(gè)生命周期中,均由最初的開(kāi)發(fā)人員來(lái)維護(hù);
2、好的編碼規(guī)范可以改善軟件的可讀性,可以讓開(kāi)發(fā)人員盡快而徹底地理解新的代碼;
3、好的編碼規(guī)范可以最大限度的提高團(tuán)隊(duì)開(kāi)發(fā)的合作效率;
4、長(zhǎng)期的規(guī)范性編碼還可以讓開(kāi)發(fā)人員養(yǎng)成好的編碼習(xí)慣,甚至鍛煉出更加嚴(yán)謹(jǐn)?shù)乃季S;
二、命名規(guī)范
1、一般概念
1、盡量使用完整的英文描述符
2、采用適用于相關(guān)領(lǐng)域的術(shù)語(yǔ)
3、采用大小寫(xiě)混合使名字可讀
4、盡量少用縮寫(xiě),但如果用了,必須符合整個(gè)工程中的統(tǒng)一定義
5、避免使用長(zhǎng)的名字(小于 15 個(gè)字母為正常選擇)
6、避免使用類(lèi)似的名字,或者僅僅是大小寫(xiě)不同的名字
7、避免使用下劃線(除靜態(tài)常量等)
2、標(biāo)識(shí)符類(lèi)型說(shuō)明
1、包( Package )的命名
Package 的名字應(yīng)該采用完整的英文描述符,都是由一個(gè)小寫(xiě)單詞組成。并且包名的前綴總是一個(gè)頂級(jí)域名,
通常是 com、edu、gov、mil、net、org 等;
如: com.yjhmily.test
2、類(lèi)( Class )的命名
類(lèi)名應(yīng)該是個(gè)一名詞,采用大小寫(xiě)混合的方式,每個(gè)單詞的首字母大寫(xiě)。盡量保證類(lèi)名簡(jiǎn)潔而富于描述。
使用完整單詞,避免縮寫(xiě)詞 ( 除非工程內(nèi)有統(tǒng)一縮寫(xiě)規(guī)范或該縮寫(xiě)詞被更廣泛使用,像 URL , HTML)
如: FileDescription
3、接口( Interface )的命名
基本與 Class 的命名規(guī)范類(lèi)似。在滿足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開(kāi)頭第一個(gè)字母為 ”I”,
便于與普通的 Class區(qū)別開(kāi)。其實(shí)現(xiàn)類(lèi)名稱(chēng)取接口名的第二個(gè)字母到最后,且滿足類(lèi)名的命名規(guī)范;
如: IMenuEngine
4、枚舉( Enum )的命名
基本與 Class 的命名規(guī)范類(lèi)似。在滿足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開(kāi)頭第一個(gè)字母為 ”E” ,
便于與普通的 Class區(qū)別開(kāi)。
如: EUserRole
5、異常( Exception )的命名
異常( Exception ) 通常采用字母 e 表示異常,對(duì)于自定義的異常類(lèi),其后綴必須為 Exception
如: BusinessException
6、方法( Method )的命名
方法名是一個(gè)動(dòng)詞,采用大小寫(xiě)混合的方式,第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。
方法名盡可能的描述出該方法的動(dòng)作行為。返回類(lèi)型為 Boolean 值的方法一般由“ is ”或“ has ”來(lái)開(kāi)頭
如: getCurrentUser() 、 addUser() 、 hasAuthority()
7、參數(shù)( Param )的命名
第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。參數(shù)量名不允許以下劃線或美元符號(hào)開(kāi)頭,
雖然這在語(yǔ)法上是允許的。參數(shù)名應(yīng)簡(jiǎn)短且富于描述。
如: public UserContext getLoginUser(String loginName);
8、常量字段 ( Constants )的命名
靜態(tài)常量字段( static final ) 全部采用大寫(xiě)字母,單詞之間用下劃線分隔;
如: public static final Long FEEDBACK;
public static Long USER_STATUS;
三、注釋規(guī)范
一個(gè)很好的可遵循的有關(guān)注釋的經(jīng)驗(yàn)法則是:
問(wèn)問(wèn)你自己,你如果從未見(jiàn)過(guò)這段代碼,要在合理的時(shí)間內(nèi)有效地明白這段代碼,你需要一些什么信息???
1、一般概念
1、注釋?xiě)?yīng)該增加代碼的清晰度
2、保持注釋的簡(jiǎn)潔
3、在寫(xiě)代碼之前或同時(shí)寫(xiě)注釋
4、注釋出為什么做了一些事,而不僅僅是做了什么
2、注釋哪些部分
1、Java 文件:必須寫(xiě)明版權(quán)信息以及該文件的創(chuàng)建時(shí)間和作者;
2、類(lèi):類(lèi)的目的、即類(lèi)所完成的功能,以及該類(lèi)創(chuàng)建的時(shí)間和作者名稱(chēng);多人一次編輯或修改同一個(gè)類(lèi)時(shí),
應(yīng)在作者名稱(chēng)處出現(xiàn)多人的名稱(chēng);
3、接口: 在滿足類(lèi)注釋的基礎(chǔ)之上,接口注釋?xiě)?yīng)該包含設(shè)置接口的目的、它應(yīng)如何被使用以及如何不被使用。
在接口注釋清楚的前提下對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)可以不加注釋?zhuān)?br />
4、方法注釋?zhuān)?對(duì)于設(shè)置 (Set 方法 ) 與獲取 (Get 方法 ) 成員的方法,在成員變量已有說(shuō)明的情況下,
可以不加注釋?zhuān)黄胀ǔ蓡T方法要求說(shuō)明完成什么功能,參數(shù)含義是什么且返回值什么;另外方法的創(chuàng)建
時(shí)間必須注釋清楚,為將來(lái)的維護(hù)和閱讀提供寶貴線索;
5、方法內(nèi)部注釋?zhuān)?控制結(jié)構(gòu),代碼做了些什么以及為什么這樣做,處理順序等,特別是復(fù)雜的邏輯處理部分,
要盡可能的給出詳細(xì)的注釋?zhuān)?br />
6、參數(shù): 參數(shù)含義、及其它任何約束或前提條件;
7、屬性: 字段描述;
8、局部 ( 中間 ) 變量: 無(wú)特別意義的情況下不加注釋?zhuān)?br />
3、注釋格式
遵循工程規(guī)定的統(tǒng)一注釋格式,一般情況下會(huì)以 codetemplates.xml 格式的文件導(dǎo)入 IDE(Eclipse)
或者用Eclipse默認(rèn)的;
四、代碼格式規(guī)范
遵循工程規(guī)定的統(tǒng)一代碼格式,一般情況下直接使用 IDE(Eclipse) 自帶的默認(rèn)代碼格式對(duì)代碼進(jìn)行格式化;
五、其他規(guī)范
JSP 文件命名
采用完整的英文描述說(shuō)明 JSP 所完成的功能,盡可能包括一個(gè)生動(dòng)的動(dòng)詞,第一個(gè)字母小寫(xiě),
如: viewMessage.jsp 、editUser.jsp 等。
六、工程特有命名規(guī)范
1、持久層
1、 Hibernate 映射文件及實(shí)體
與數(shù)據(jù)庫(kù)表名稱(chēng)完全對(duì)應(yīng);
如: Advertisement.hbm.xml 、 Advertisement.java
2、數(shù)據(jù)訪問(wèn) DAO
DAO 接口和實(shí)現(xiàn)類(lèi)名稱(chēng)必須完全符合正常接口和實(shí)現(xiàn)類(lèi)的命名規(guī)則,且最后以 ”DAO” 結(jié)尾
DAO 內(nèi)的數(shù)據(jù)訪問(wèn)方法必須足夠抽象的描述出對(duì)數(shù)據(jù)庫(kù)的基本 CRUD 操作;
如: ICrossAdDAO( 接口 ) 、 CrossAdDAO( 實(shí)現(xiàn)類(lèi) )
3、各種操作數(shù)據(jù)庫(kù)的 HQL 配置文件
HQL 文件的個(gè)數(shù)原則上與系統(tǒng)的 Services 層的服務(wù)個(gè)數(shù)相等,且以服務(wù)名稱(chēng)命名 HQL 文件;
如: resource.hbm.xml
2、服務(wù)層
1、服務(wù)接口和實(shí)現(xiàn)
服務(wù)接口和實(shí)現(xiàn)類(lèi)必須完全符合正常接口和實(shí)現(xiàn)類(lèi)的命名規(guī)則;以工程定義的服務(wù)名為主體,
并統(tǒng)一以 ”Serv” 結(jié)尾
如: IResourceServ( 服務(wù)接口 ) 、 ResourceServ( 接口實(shí)現(xiàn)類(lèi) )
2、服務(wù)接口方法
方法名是一個(gè)動(dòng)詞,采用大小寫(xiě)混合的方式,第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。
方法名盡可能的描述出該方法的動(dòng)作行為。
返回類(lèi)型為 Boolean 值:用“ is ”或“ has ”來(lái)開(kāi)頭
得到某數(shù)據(jù): get+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型;
得到所有數(shù)據(jù): get+All+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型;
通過(guò) XXX 得到 / 查詢某數(shù)據(jù): get/query+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型 +By+ 條件;
添加某數(shù)據(jù): save/add+ 數(shù)據(jù)描述名詞 ()
更新某數(shù)據(jù): save/update+ 數(shù)據(jù)描述名詞;
刪除某數(shù)據(jù): delete/remove+ 數(shù)據(jù)描述名詞;
3、業(yè)務(wù)對(duì)象
業(yè)務(wù)名稱(chēng) +BO
4、查詢參數(shù)對(duì)象
凡是繼承 Abst***QuerySpec 的查詢參數(shù)類(lèi)全部滿足以下規(guī)則:
Query+ 所要查詢的數(shù)據(jù)描述名詞 +Spec
作為參數(shù)傳入時(shí),參數(shù)名必須為:所要查詢的數(shù)據(jù)描述名詞 +Spec
如: QueryProgramSpec
3、MVC 層
1、Action 控制層
Action 類(lèi)名:功能模塊名稱(chēng) +Action ;
Actoin 方法名稱(chēng)盡可能的描述出頁(yè)面遷移的去向
如: LoginAction( 登錄用 action) , toWelcome( 轉(zhuǎn)向歡迎頁(yè)的 action 方法 )
2、資源文件
系統(tǒng)全局資源文件: globalMessages_+ 字符編碼類(lèi)型 +.properties
功能模塊內(nèi)部的資源文件: package.properties
4、Spring 配置文件
1、Action 相關(guān)配置文件
文件目錄: WebRoot/WEB-INF/spring/action/ 功能模塊名稱(chēng) +_ApplicationContext.xml
2、Services 相關(guān)配置文件
文件目錄: WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml
3、全局性配置文件
文件目錄: WebRoot/WEB-INF/spring/工程名+_ApplicationContext.xml
5、JSP 文件
采用完整的英文描述說(shuō)明 JSP 所完成的功能,盡可能包括一個(gè)生動(dòng)的動(dòng)詞,第一個(gè)字母小寫(xiě),
如: viewMessage.jsp 、editUser.jsp 等。