Java常見開發規範

1 背景概述

做爲程序員大軍中的一員,筆者工做於瀋陽數通暢聯軟件技術有限公司。在任職工做的第一天就聽領導強調開發規範的重要性,可是筆者內心還想爲何開發規範是最重要的,難道是不該該是實現功能就萬事大吉了?java

隨着時間的推移,筆者也經歷了幾個軟件項目,愈來愈意識到開發規範的重要。今天筆者將本身的所聽、所學以及我的的總結匯總出來與你們分享,但願能夠爲你們提供幫助。程序員

2 目的意義

在團隊協做開發的狀況下,一套鮮明的編程風格,可讓協做者、後繼者和本身一目瞭然,在很短的時間內看清程序的結構,理解設計的思路。提升代碼的可讀性、可重用性、程序健壯性、可移植性和可維護性。制定開發規範的目的是爲了提升軟件開發效率及所開發的軟件的可維護性,提升軟件的質量。經過開發規範的約束提高自身的邏輯思惟能力,也側面的提高我的編碼能力及水平。編程

3 開發規範

做爲軟件項目的開發人員而言,對於功能代碼,首要的要求是代碼必須正確的,可以保證功能是可運行的,而且可以知足客戶的需求。第二個的要求是代碼必須清晰易懂,方便於其餘的程序員可以容易理解代碼的原理,加強代碼的可讀性,保證代碼統一一致的編程風格。下面咱們經過格式、命名、權限、性能等幾個方面來明確開發規範。安全

3.1 統一格式

  • 總體風格
  1. 採用階梯層次組織程序代碼。每層次縮進爲4格,括號位於下一行。要求相匹配的大括號在同一列,對下一行一樣要再縮進4格。參考代碼以下:
  2. 對變量的定義,儘可能位於函數的開始位置,對於全局變量/靜態變量要定義與類名與構造函數之間。
  3. 空格表示分割,用一個空格運算符兩邊用一個空格隔開。如a + b = c,不能a+b=c;若是逗號語句後不還行,則須要在逗號後緊跟一個空格如:call(a, b, c);不能call(a,b,c)。
  • 方法定義
  1. 對於統一方法風格的定義,單個函數的有效代碼長度當儘可能在100行之內,進一步能夠保證代碼邏輯清晰可見。
  2. 邏輯上相關序代碼與其先後之程序代碼間應以空白行加以分隔;在註釋段與程序 段、以及不一樣程序段插入空行。提升可讀性。
  3. 單個類不宜過大,當出現此類過大時當將相應功能的代碼重構到其餘類中,經過組合等方式來調用,建議單個類的長度包括註釋行不超過1500行。儘可能避免使用大類和長方法。
  • 嵌套關係
  1. IF語句的嵌套層數儘可能保證在3層之內,FOR/WHILE循環儘可能爲兩層循環。若是超過了限定層數應該考慮本身的代碼邏輯是存在可調整性。
  2. 在同一個IF判斷條件中布爾表達式中的布爾運算符(&&,||)的個數不超過10個。

3.2 命名規範

  • 包名定義
  1. 包名的前幾個爲固定名稱,一般爲公司的域名/項目的固定名稱而後承接項目名稱,若是域名尚未肯定的話,採用公司固定的幾個名稱。如:com.agileai.wm
  2. 在包名的接下來一個單詞爲模塊的名稱。如:用戶模塊,包名爲com.agileai.wm.user
  3. 全部包的命名必須採用小寫英文字母。命名均含有業務語義,能夠快速地傳達該類的用途。關於模塊的訪問操做,採用分層形式,通常分爲:

模型(model)層操做:通常定義在com.agileai.wm.user.module.service中,其中user爲模塊名稱。運維

控制器(controller)層操做:通常定義在com.agileai.wm.user.module.handler中。jsp

視圖(view)層操做:通常定義在文件路徑與對應的報名保持一致中。ide

  • 類名定義
  1. 參照java駝峯命名法,類名的首字母必須採用大寫的形式,若是類名爲多詞組合而成的話,那麼每一個詞的首字母必須採用大寫。如:ForumManagePostPortlet.java
  2. 選擇命名具備業務語義,能快速地傳達該類的用途。參考模型以下:

模型(model)層操做:通常定義爲,接口類:ForumProvider.java   接口實現類:ForumProviderImpl.java。函數

控制器(controller)層操做:通常定義爲XXXHandler,如:ForumPostLocatorHandler。性能

視圖(view)層操做:通常定義爲:XXX.jsp,如:ForumUserEdit.jsp。學習

  • 方法命名
  1. 選擇有意義的名字,能快速地傳達該方法的用途。參照java駝峯命名法,首字母以小寫開頭,每一個單詞首字母大寫(第一個單詞除外)。
  2. 對數據操做的方法命名一般以insert(插入),delete(刪除),update(更新),select(查找),count(統計)開頭。獲取批量數據一般定義爲findXXXRecords(),獲取單條記錄一般爲getXXXRecord()。
  3. 在進行方法名名師一般會根據方法的行爲命名,描述方法的意義,而不採用方法的目的命名。如:系統的添加新用戶,用戶能夠前臺註冊,也能夠管理員後臺添加,方法會被重用,最好不要用使用register,採用add會更好寫。
  • 變量命名
  1. 駝峯命名法,當變量名或函式名是由一個或多個單字連結在一塊兒,而構成的惟一識別字時,首字母以小寫開頭,每一個單詞首字母大寫(第一個單詞除外)
  2. 靜態變量一般採用所有大寫的形式來書寫,對於採用多詞合成的變量採用「_」來鏈接各單詞。如:USER_LIST
  3. 除非是在循環中,不然通常不推薦使用單個字母做爲變量名,i、j、k等只做爲小型循環的循環索引變量。
  4. 若是須要對變量名進行縮寫時,必定要注意整個代碼中縮寫規則的一致性。例如,若是在代碼的某些區域中使用intCnt,而在另外一些區域中又使用intCount,就會給代碼增長沒必要要的複雜性。建議變量名中儘可能不要出現縮寫。

3.3 權限定義

  1. public修飾符:它具備最大的訪問權限,能夠訪問任何一個在CLASSPATH下的類、接口、異常等。它每每用於對外的狀況,也就是對象或類對外的一種接口的形式。一般在通用調用、跨模塊調用時選擇public修飾符。
  2. protected修飾符:它主要的做用就是用來保護子類的。它的含義在於子類能夠用它修飾的成員,其餘的不能夠,它至關於傳遞給子類的一種繼承的東西。一般在須要繼承時選擇。
  3. default修飾符:什麼都不寫就是default,它是針對本包訪問而設計的,任何處於本包下的類、接口、異常等,均可以相互訪問,即便是父類沒有用protected修飾的成員也能夠。
  4. Private修飾符:它的訪問權限僅限於類的內部,是一種封裝的體現,例如,大多數的成員變量都是修飾符爲private的,一般不但願被其餘任何外部的類訪問時選擇private。

4 代碼封裝

做爲面向對象的語言-JAVA,其三大基本特徵就是封裝、繼承以及多態。其中封裝是繼承與多態的基礎。經過封裝不只可使代碼邏輯更加清晰,同時也能夠實現最小調整達到全局調整的目的。經過程序的代碼的封裝也能夠提高複用率減小代碼的冗餘程度。下面咱們介紹常見的須要封裝的幾種場景如:本類複用、多類調用等。

4.1 本類複用

  1. 在實現代碼封裝以前須要明確不一樣修飾符的訪問權限,其中public爲公共調用,private爲私有調用,protected爲繼承調用。
  2. 在本類中屢次引用相同處理邏輯的程序代碼,須要將其統一進行提取封裝爲公共調用的方法,並將其的訪問權限定義爲private最大程度的確保程序的安全性。
  3. 在本類中屢次引用的相同的變量值(一般爲用於比較的固定字符串或者靜態的變量值)須要將其定義在類名與構造函數之間,保證在後續維護過程當中能夠實現最小調整便可調整全局的目的。

4.2 多類調用

  1. 對於被多處引用的結果屬性,一般將其封裝爲對象類,將其屬性定義爲變量,並初始set、get方法對齊賦值或者取值。
  2. 對於某些屬性變量值被多處調用,咱們一般將被調用的屬性變量值定義在一個公共類中,並將其定義爲static變量,保證在其餘環境引用是能夠直接使用類名.變量名進行調用。
  3. 在實現業務功能需求如Excel導入、導出,打印等功能,其功能可爲單獨提取實現,一般咱們將撰寫Helper幫助類(XXXHelperHandler)提供實現功能,以便業務功能調用實現需求。

4.3 代碼重構

  1. 不管是在項目中仍是平常的工做中,對於代碼的重構均是不可缺乏的,一般咱們能夠將公共的方法提取出來放在一個新的Handler中利用新的Handler繼承BaseHandler原有的Handler繼承新建立的Handler。
  2. 若是公共方法不能徹底複用,能夠將公共的邏輯提取出來放在新的XXXHelperHandler中,在Handler中進行調用方法便可。

5 優點說明

5.1 下降成本

  • 好的開發規範能夠儘量的減小一個軟件的維護成本,雖然在開發過程當中要符合開發規範的條條框框看似浪費時間,可是從長遠的軟件代碼維護來看更清晰的代碼邏輯更節省交接以及維護是時間。下降了項目/產品的維護成本。
  • 好的開發規範能夠加強軟件代碼的可讀性,良好的編程規範能夠實現代碼的自注釋,可讓產品/項目的後續開發人員直觀明確的瞭解代碼的邏輯,較大幅度的下降了因代碼邏輯混亂形成的工做交接困難,進一步影響了整個項目/產品的開發(運維)週期。經過週期的縮短減小人力的投入下降項目/產品的人員成本。

5.2 提升效率

好的開發規範能夠最大限度的提升團隊開發的效率;良好的開發規範能夠保證代碼風格的統一,保證整個項目/產品的開發風格是一致的,即便人員變動維護或者進行排錯推斷也能夠減小因編程風格不統一形成的時間浪費。

5.3 能力提高

長期的規範性編碼還能夠促使開發人員養成良好的編程習慣,經過代碼的邏輯性也可體現出開發人員的邏輯思惟,不斷提高本身的開發的規範性也能夠從側面提高我的邏輯思惟能力。

6 我的總結

筆者做爲數通暢聯軟件技術有限公司中的一名技術人員,從開始參加工做我的對公司強行要求開發規範的不理解至今深度認知開發規範的重要性。筆者在數通暢聯這個你們庭中,天天耳濡目染學習java常見的開發規範如:命名、權限、格式等。經過自身的調整以及認知的提高也逐步提高了我的的編碼能力。

筆者認爲一個良好的編碼習慣不只體現出我的的能力水平,也體現出其所在環境,所在團隊的總體風氣。但願你們從此均可以培養本身的編碼習慣使開發規範中的硬性要求成爲本身的下意識習慣。

相關文章
相關標籤/搜索