當前訪問本站: hits

          yjhmily

          堅持走自己的路……

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            100 Posts :: 8 Stories :: 353 Comments :: 0 Trackbacks
          ??
          ???? 最近經(jīng)常看一些朋友寫的源代碼,總是感覺編碼規(guī)范問題還沒有成為大家的關(guān)注點,導致代碼的通用可讀性相對比較差;

          所以在此嘮叨幾句編碼規(guī)范(以struts2+spring2+hibernate3架構(gòu)的項目為例),大家各取所需,歡迎拍磚!


          一、規(guī)范存在的意義

          ??? 應(yīng)用編碼規(guī)范對于軟件本身和軟件開發(fā)人員而言尤為重要,有以下幾個原因:

          ??? 1、好的編碼規(guī)范可以盡可能的減少一個軟件的維護成本 , 并且?guī)缀鯖]有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護;

          ??? 2、好的編碼規(guī)范可以改善軟件的可讀性,可以讓開發(fā)人員盡快而徹底地理解新的代碼;

          ??? 3、好的編碼規(guī)范可以最大限度的提高團隊開發(fā)的合作效率;

          ??? 4、長期的規(guī)范性編碼還可以讓開發(fā)人員養(yǎng)成好的編碼習慣,甚至鍛煉出更加嚴謹?shù)乃季S;

          二、命名規(guī)范

          ??? 1、一般概念

          ??????? 1、盡量使用完整的英文描述符

          ??? ??? 2、采用適用于相關(guān)領(lǐng)域的術(shù)語

          ??? ??? 3、采用大小寫混合使名字可讀

          ??? ??? 4、盡量少用縮寫,但如果用了,必須符合整個工程中的統(tǒng)一定義
          ??? ???
          ??? ??? 5、避免使用長的名字(小于 15 個字母為正常選擇)

          ??? ??? 6、避免使用類似的名字,或者僅僅是大小寫不同的名字

          ??? ??? 7、避免使用下劃線(除靜態(tài)常量等)

          ???? 2、標識符類型說明

          ??????? 1、包( Package )的命名
          ??? ??? ??? Package 的名字應(yīng)該采用完整的英文描述符,都是由一個小寫單詞組成。并且包名的前綴總是一個頂級域名,
          ??? ??? ??? 通常是 com、edu、gov、mil、net、org 等;
          ??? ??? ??? 如: com.yjhmily.test

          ??? ??? 2、類( Class )的命名
          ??? ??? ??? 類名應(yīng)該是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量保證類名簡潔而富于描述。
          ??? ??? ??? 使用完整單詞,避免縮寫詞 ( 除非工程內(nèi)有統(tǒng)一縮寫規(guī)范或該縮寫詞被更廣泛使用,像 URL , HTML)
          ??? ??? 如: FileDescription

          ??? ??? 3、接口( Interface )的命名
          ??? ??? ??? 基本與 Class 的命名規(guī)范類似。在滿足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開頭第一個字母為 ”I”,
          ??? ??? ??? 便于與普通的 Class區(qū)別開。其實現(xiàn)類名稱取接口名的第二個字母到最后,且滿足類名的命名規(guī)范;
          ??? ??? 如: IMenuEngine

          ??? ??? 4、枚舉( Enum )的命名
          ??? ??? ??? 基本與 Class 的命名規(guī)范類似。在滿足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開頭第一個字母為 ”E” ,
          ??? ??? ??? 便于與普通的 Class區(qū)別開。
          ??? ??? 如: EUserRole

          ??? ??? 5、異常( Exception )的命名
          ??? ??? ??? 異常( Exception ) 通常采用字母 e 表示異常,對于自定義的異常類,其后綴必須為 Exception
          ??? ??? 如: BusinessException

          ??? ??? 6、方法( Method )的命名
          ??? ??? ??? 方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。
          ??? ??? ??? 方法名盡可能的描述出該方法的動作行為。返回類型為 Boolean 值的方法一般由“ is ”或“ has ”來開頭
          ??? ??? 如: getCurrentUser() 、 addUser() 、 hasAuthority()

          ??? ??? 7、參數(shù)( Param )的命名
          ??? ??? ??? 第一個單詞的首字母小寫,其后單詞的首字母大寫。參數(shù)量名不允許以下劃線或美元符號開頭,
          ??? ??? ??? 雖然這在語法上是允許的。參數(shù)名應(yīng)簡短且富于描述。
          ??? ??? 如: public UserContext getLoginUser(String loginName);
          ??? ???
          ??? ??? 8、常量字段 ( Constants )的命名
          ??? ??? ??? 靜態(tài)常量字段( static final ) 全部采用大寫字母,單詞之間用下劃線分隔;
          ??? ??? 如: public static final Long FEEDBACK;
          ??????? public static Long USER_STATUS;

          ?三、注釋規(guī)范

          ??????? 一個很好的可遵循的有關(guān)注釋的經(jīng)驗法則是:

          ??? ??? ??? 問問你自己,你如果從未見過這段代碼,要在合理的時間內(nèi)有效地明白這段代碼,你需要一些什么信息???

          ??? ??? 1、一般概念

          ??????????? 1、注釋應(yīng)該增加代碼的清晰度

          ??? ??? ??? 2、保持注釋的簡潔

          ??? ??? ??? 3、在寫代碼之前或同時寫注釋

          ??? ??? ??? 4、注釋出為什么做了一些事,而不僅僅是做了什么

          ??? ??? 2、注釋哪些部分

          ??????????? 1、Java 文件:必須寫明版權(quán)信息以及該文件的創(chuàng)建時間和作者;

          ??? ??? ??? 2、類:類的目的、即類所完成的功能,以及該類創(chuàng)建的時間和作者名稱;多人一次編輯或修改同一個類時,
          ??? ??? ??? ??? 應(yīng)在作者名稱處出現(xiàn)多人的名稱;

          ??? ??? ??? 3、接口: 在滿足類注釋的基礎(chǔ)之上,接口注釋應(yīng)該包含設(shè)置接口的目的、它應(yīng)如何被使用以及如何不被使用。
          ??? ??? ??? ??? 在接口注釋清楚的前提下對應(yīng)的實現(xiàn)類可以不加注釋;

          ??? ??? ??? 4、方法注釋: 對于設(shè)置 (Set 方法 ) 與獲取 (Get 方法 ) 成員的方法,在成員變量已有說明的情況下,
          ??? ??? ??? ??? 可以不加注釋;普通成員方法要求說明完成什么功能,參數(shù)含義是什么且返回值什么;另外方法的創(chuàng)建
          ??? ??? ??? ??? 時間必須注釋清楚,為將來的維護和閱讀提供寶貴線索;

          ??? ??? ??? 5、方法內(nèi)部注釋: 控制結(jié)構(gòu),代碼做了些什么以及為什么這樣做,處理順序等,特別是復雜的邏輯處理部分,
          ??? ??? ??? ??? 要盡可能的給出詳細的注釋;

          ??? ??? ??? 6、參數(shù): 參數(shù)含義、及其它任何約束或前提條件;

          ??? ??? ??? 7、屬性: 字段描述;

          ??? ??? ??? 8、局部 ( 中間 ) 變量: 無特別意義的情況下不加注釋;

          ??? ??? 3、注釋格式

          ??????????? 遵循工程規(guī)定的統(tǒng)一注釋格式,一般情況下會以 codetemplates.xml 格式的文件導入 IDE(Eclipse)
          ??? ??? ??? 或者用Eclipse默認的;

          四、代碼格式規(guī)范

          ??? ??? ??? 遵循工程規(guī)定的統(tǒng)一代碼格式,一般情況下直接使用 IDE(Eclipse) 自帶的默認代碼格式對代碼進行格式化;

          五、其他規(guī)范

          ??? ?? JSP 文件命名
          ??? ??? ??? 采用完整的英文描述說明 JSP 所完成的功能,盡可能包括一個生動的動詞,第一個字母小寫,
          ??? ??? 如: viewMessage.jsp 、editUser.jsp 等。

          六、工程特有命名規(guī)范

          ??????? 1、持久層

          ??????????? 1、 Hibernate 映射文件及實體
          ??? ??? ??? ??? 與數(shù)據(jù)庫表名稱完全對應(yīng);
          ??? ??? ??? ??? 如: Advertisement.hbm.xml 、 Advertisement.java

          ??? ??? ??? 2、數(shù)據(jù)訪問 DAO
          ??? ??? ??? ??? DAO 接口和實現(xiàn)類名稱必須完全符合正常接口和實現(xiàn)類的命名規(guī)則,且最后以 ”DAO” 結(jié)尾
          ??? ??? ??? ??? DAO 內(nèi)的數(shù)據(jù)訪問方法必須足夠抽象的描述出對數(shù)據(jù)庫的基本 CRUD 操作;
          ??? ??? ??? ??? 如: ICrossAdDAO( 接口 ) 、 CrossAdDAO( 實現(xiàn)類 )
          ??? ??? ???
          ??? ??? ??? 3、各種操作數(shù)據(jù)庫的 HQL 配置文件
          ??? ??? ??? ??? HQL 文件的個數(shù)原則上與系統(tǒng)的 Services 層的服務(wù)個數(shù)相等,且以服務(wù)名稱命名 HQL 文件;
          ??? ??? ??? ??? 如: resource.hbm.xml

          ??? ???2、服務(wù)層

          ??????????? 1、服務(wù)接口和實現(xiàn)
          ??? ??? ??? ??? 服務(wù)接口和實現(xiàn)類必須完全符合正常接口和實現(xiàn)類的命名規(guī)則;以工程定義的服務(wù)名為主體,
          ??? ??? ??? ??? 并統(tǒng)一以 ”Serv” 結(jié)尾
          ??? ??? ??? ??? 如: IResourceServ( 服務(wù)接口 ) 、 ResourceServ( 接口實現(xiàn)類 )

          ??? ??? ??? 2、服務(wù)接口方法
          ??? ??? ??? ??? 方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。
          ??? ??? ?? 方法名盡可能的描述出該方法的動作行為。
          ??? ??? ??? ??? 返回類型為 Boolean 值:用“ is ”或“ has ”來開頭
          ??? ??? ??? ??? 得到某數(shù)據(jù): get+ 數(shù)據(jù)描述名詞復數(shù) + 數(shù)據(jù)類型;
          ??? ??? ??? ??? 得到所有數(shù)據(jù): get+All+ 數(shù)據(jù)描述名詞復數(shù) + 數(shù)據(jù)類型;
          ??? ??? ??? ??? 通過 XXX 得到 / 查詢某數(shù)據(jù): get/query+ 數(shù)據(jù)描述名詞復數(shù) + 數(shù)據(jù)類型 +By+ 條件;
          ??? ??? ??? ??? 添加某數(shù)據(jù): save/add+ 數(shù)據(jù)描述名詞 ()
          ??? ??? ??? ??? 更新某數(shù)據(jù): save/update+ 數(shù)據(jù)描述名詞;
          ??? ??? ??? ??? 刪除某數(shù)據(jù): delete/remove+ 數(shù)據(jù)描述名詞;

          ??? ??? ??? 3、業(yè)務(wù)對象
          ??? ??? ??? ??? 業(yè)務(wù)名稱 +BO

          ??? ??? ??? 4、查詢參數(shù)對象
          ??? ??? ??? ??? 凡是繼承 Abst***QuerySpec 的查詢參數(shù)類全部滿足以下規(guī)則:
          ??? ??? ??? ??? Query+ 所要查詢的數(shù)據(jù)描述名詞 +Spec
          ??? ??? ??? ??? 作為參數(shù)傳入時,參數(shù)名必須為:所要查詢的數(shù)據(jù)描述名詞 +Spec
          ??? ??? ??? ??? 如: QueryProgramSpec

          ??? ???3、MVC 層???????????

          ??????????? 1、Action 控制層
          ??? ??? ??? ??? Action 類名:功能模塊名稱 +Action ;
          ??? ??? ??? ??? Actoin 方法名稱盡可能的描述出頁面遷移的去向
          ??? ??? ??? ??? 如: LoginAction( 登錄用 action) , toWelcome( 轉(zhuǎn)向歡迎頁的 action 方法 )

          ??? ??? ??? 2、資源文件
          ??? ??? ??? ??? 系統(tǒng)全局資源文件: globalMessages_+ 字符編碼類型 +.properties
          ??? ??? ??? ??? 功能模塊內(nèi)部的資源文件: package.properties

          ??? ??? 4、Spring 配置文件

          ??????????? 1、Action 相關(guān)配置文件
          ??? ??? ??? ??? 文件目錄: WebRoot/WEB-INF/spring/action/ 功能模塊名稱 +_ApplicationContext.xml

          ??? ??? ??? 2、Services 相關(guān)配置文件
          ??? ??? ??? ??? 文件目錄: WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml

          ??? ??? ??? 3、全局性配置文件
          ??? ??? ??? ??? 文件目錄: WebRoot/WEB-INF/spring/工程名+_ApplicationContext.xml

          ??? ???5、JSP 文件
          ??? ??? ??? 采用完整的英文描述說明 JSP 所完成的功能,盡可能包括一個生動的動詞,第一個字母小寫,
          ??? ??? ??? 如: viewMessage.jsp 、editUser.jsp 等。

          posted on 2007-09-27 13:31 kangxm 閱讀(3657) 評論(10)  編輯  收藏 所屬分類: J2EE開發(fā)環(huán)境&工具軟件開發(fā)

          Feedback

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-27 13:45 ky
          是不是發(fā)的文件中有問題啊?怎么這么多supportLists...   回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-27 14:23 千里冰封
          是挺不錯的,不過,JAVA中接口的命名好像不是前面加個I哦,好像是后面加able,比如Comparable,Flushable,Closeable,Iterable,Runnable,Serialiable....  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-27 14:24 kangxm
          抱歉!剛才排版有點問題,現(xiàn)在重新調(diào)了一下!  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-27 14:36 kangxm
          恩!冰封兄說的有道理!

          java中的接口確實是在后面加able,JDK里面都這么干的;

          這個規(guī)范是在做公司項目的時候制動出來的,無意間延續(xù)了
          以前項目中些大家自己約定的習慣!確實不太合理;  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-27 16:55 Cachalot
          規(guī)范確實很有用,我覺得一個團隊里面一定要有一個明確的做事情的規(guī)矩,并且得到所有人的遵守,這樣才能保證彼此能夠交流。與之相比,團隊中個人的能力倒可以位于其次  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-27 21:10 bson
          歸納得很詳細啊~~我要把這篇文章給我的同學們看看  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-28 12:57 L2
          一個團隊開發(fā),沒有規(guī)范的話,開發(fā)中的協(xié)作以及后期的維護。都會出現(xiàn)很多問題
          歸納非常好,謝謝!  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2007-09-30 12:30 buffet
          非常好,絕對值得推廣  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2008-04-21 18:49 dfds
          @Cachalot
          dsfsdfsdfsdfsdfsdf  回復  更多評論
            

          # re: JAVA程序員不可不注意的編碼規(guī)范 2011-06-19 21:11 shxsun
          那抽象類怎么命名?  回復  更多評論
            

          主站蜘蛛池模板: 监利县| 榆林市| 辽宁省| 山东省| 兴和县| 芒康县| 闵行区| 苍溪县| 青河县| 呼和浩特市| 合作市| 玉门市| 英超| 额尔古纳市| 扬州市| 枣强县| 乐东| 吉林省| 岚皋县| 济阳县| 五常市| 舟曲县| 徐州市| 扶风县| 宁波市| 成都市| 黄骅市| 河池市| 和硕县| 阿拉善盟| 娱乐| 颍上县| 黄冈市| 大姚县| 伊春市| 双辽市| 云霄县| 长泰县| 田林县| 湘潭市| 福建省|