阿里Java開發規範記錄(一)

    近日,從網上下載了阿里雲棲社區發佈的《阿里巴巴Java開發手冊(正式版)》v1.1.0版。從編程以來,一直苦於沒有相關的、全面的、靠譜的規範能夠參考,有了這手冊,往後編程也算是找到了依據。瞧,人家阿里都是按照這規則來操做的!面試

       雲棲社區此舉對於普通Java開發者來講,算是功德無量,在必定程度上規範了Java開發者的編程習慣。爲後來者謀福利了。編程

  這本手冊一共分爲五個部分,包括了編程規約、異常日誌、MySQL規約、工程規約、安全規約。基本上從編碼的各個方面都細細的理了一遍,感受徹底能夠當作是公司招人的面試題,用來考較對方的編碼習慣,甚至也能在必定程度上能推斷出對方的編碼水平,畢竟高的編碼水平,其編碼習慣確定不會差到哪去。安全

       手冊的內容約束分爲三種級別,分別爲強制、推薦、參考。強制,即必須聽從的編碼規範;推薦,則表示最好聽從該規範,有利於提升代碼水平;參考,則表示須要瞭解便可。併發

       花了一個上午,仔細地將這篇手冊閱讀了一番,結果只看了編程規約這部分,從中摘錄了一些規約,我以爲往後在編碼過程當中須要注意及提高的地方。框架

     命名規約

               【強制】抽象類命名使用 Abstract 或 Base 開頭; 異常類命名使用 Exception 結尾; 測試類命名以它要測試的類的名稱開始,以 Test 結尾。 
               點評:一直以來對於命名都比較隨意,尤爲是面對很長的類名及方法名時都會本身進行單詞簡化,時間久了,連本身都會忘記這個縮寫究竟是個什麼意思,o(╯□╰)o。另外,這些類名的命名規則也能遵照,只是這些標識詞語老是有時放開頭有時放結尾,缺乏些統一性。
 
       【強制】 POJO 類中布爾類型的變量,都不要加 is,不然部分框架解析會引發序列化錯誤。 
                 點評:可能由於開發的項目少,使用的框架不夠豐富,這個問題卻是歷來沒遇到過。固然也基本上沒這麼寫過
 
       【參考】各層命名規約:
A) Service/DAO 層方法命名規約
1) 獲取單個對象的方法用 get 作前綴。
2) 獲取多個對象的方法用 list 作前綴。
3) 獲取統計值的方法用 count 作前綴。
4) 插入的方法用 save推薦) 或 insert 作前綴。
5) 刪除的方法用 remove推薦) 或 delete 作前綴。
6) 修改的方法用 update 作前綴。
B) 領域模型命名規約
1) 數據對象: xxxDO, xxx 即爲數據表名。
2) 數據傳輸對象: xxxDTO, xxx 爲業務領域相關的名稱。
3) 展現對象: xxxVO, xxx 通常爲網頁名稱。
4) POJO 是 DO/DTO/BO/VO 的統稱,禁止命名成 xxxPOJO 

                點評:由於公司人來人往的緣故,對方法的命名歷來都是本身按照本身的那套玩。就我我的習慣而言,只要是獲取對象所有都是get作前綴,阿里的這種作法的確能夠用來參考參考。工具

      OOP規約

                  【強制】 POJO 類必須寫 toString 方法。使用 IDE 的中工具: sourcegenerate toString時,若是繼承了另外一個 POJO 類,注意在前面加一下 super.toString

         說明: 在方法執行拋出異常時,能夠直接調用 POJO 的 toString()方法打印其屬性值,便於排查問題。測試

         點評:這個提議很是好。如其所言,有利於排查問題。
 
         【強制】泛型通配符<? extends T>來接收返回的數據,此寫法的泛型集合不能使用 add 方法, 而<? super T>不能使用 get 方法,作爲接口調用賦值時易出錯。

          說明: 擴展說一下 PECS(Producer Extends Consumer Super)原則: 1) 頻繁往外讀取內容的,適合用上界 Extends。 2) 常常往裏插入的,適合用下界 Super阿里雲

         點評:泛型常常用。可是,泛型通配符卻基本上沒怎麼用過。看了一下PECS原則,頗有意思。若是熟練掌握的話,能夠在某些特定場景中提高代碼的質量。   
 
         【強制】不要在 foreach 循環裏進行元素的 remove/add 操做。 remove 元素請使用 Iterator方式,若是併發操做,須要對 Iterator 對象加鎖。 
          點評:這個問題我在開發中遇到過。不過,在處理這個問題時有些笨拙。對於併發操做,我使用的是併發隊列ConcurrentLinkedQueue。
相關文章
相關標籤/搜索