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