一、規范存在的意義
??? 應用編碼規范對于軟件本身和軟件開發人員而言尤為重要,有以下幾個原因:
??? 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 等。
-The End-