1.爲何須要要規範管理
a.web項目臃腫,不利於部署與管理,使用體驗差
b.項目中使用技術駁雜,可讀性差
c.項目業務不統一,每每開發出來的代碼通用性差,擴展性差
d.代碼命名沒有統一規範,註釋少
e.人員使用變更頻繁,習慣性帶入我的開發習慣,接手項目困難
f.管理人員對代碼審查薄弱
2.如何規範管理
a.爲了保證質量,下降成本,注重代碼審查
b.強制開發人員遵照項目開發代碼命名等規範
c.針對業務複雜的方法,作好註釋
e.堅定剔除一些擴展性差,不易維護的惡性代碼web
下面說是整理的一些關於代碼規範的具體措施算法
爲了保證公司編寫出的程序都符合相同的規範,並且便捷,保證一致性、統一性更符合構件化的要求而創建的程序編碼規範,要使程序易懂。app
適用於企業全部基於JavaEE軟件開發項目。ide
全部命名(類、函數、變量..)均要求意義明確易於理解,儘可能使用有實際意義的英文單詞或英文單詞的縮寫,避免在代碼中直接使用數字等不肯定意義的詞,更切忌使用中文拼音的首字母。命名推薦使用駝峯命名方式函數
外部註釋指對文件、類、方法等添加註釋頭,能夠利用Eclipse的註釋模板功能快速的添加註釋,註釋模板設置方法,Eclipse->Windows->Preferences->Java->Code Style->Code Templates->Comments現統一規定以下:ui
Files:編碼
/** *@Title: ${file_name} *@Package ${package_name} *@Description: ${todo} *@author finger *@date ${date} ${time} *@version V1.0 */
Types:lua
/** *@title ${type_name} *@descript ${todo} *@author finger *@date ${date} ${time} *@version V1.0 */
Fields:spa
/** *@Fields ${field} ${todo} */
Constructors:命令行
/** *<p>Title: </p> *<p>Description: </p> *${tags} */
Methods:
/** *@title ${enclosing_method} *@descript ${todo} *@param ${tags} *@return ${return_type} *@throws */
Overriding methods:
/*(non Javadoc) *<p>Title: ${enclosing_method}</p> *<p>Description: </p> *${tags} *${see_to_overridden} */
Delegate methods:
/** *${tags} *${see_to_target} */
Getters:
/** *@return the ${bare_field_name} */
Setters:
/** *@param ${param} the ${bare_field_name} to set */
外部註釋需在必要的地方補充完整如下信息
@descript 描述成員方法的功能及存在的緣由 @author 名稱 後加上相應的做者 @version 文本 插入指定文本的版本信息 @param 參數-名稱描述 @return返回值描述 @exception 完整的類名稱 描述信息 @throws 完整的類名稱 描述信息 @see 引用其餘類,格式以下:@see 類名 @see 完整類名 @see 完整類名#方法名 {@link引用} @Override 重載函數必須在函數頭添加劇載標示
Java源碼中除靜態常量定義外應禁止使用下劃線(_)做爲各類變量、函數、接口、類名等各類命名的字符,命名應儘量不使用拼音及拼音縮寫,而改用規範的英文翻譯單詞命名。其餘具體命名規範以下:
Package的名字應爲所有小寫單詞組成,不該包含大寫字母、數字等其餘字符,單詞應爲完整的單詞或規範且公認的縮寫。
例:com.companyName.mobile.app
Class的名字應爲大寫字母開頭,後面單詞也需大寫字母開頭。
例:TaskDetailActivity
接口命名同Class
常量名字全部字符均須大寫,單詞間使用下劃線(_)作分隔符。
例:CONNECT_TIMEOUT
變量的命名主要分如下兩種方法:
Camel標誌法:首字母是小寫,接下來的單詞都以大寫字母開頭。對於自定義的類或不經常使用的類對象使用該種命名法則(除下述外的類型)。
代碼的書寫規範主要從註釋和書寫習慣對代碼進行一個規範。一段規範的代碼不只便於調試及時發現錯誤所在,更能給他人或者往後本身維護帶來許多便利,須要注意如下幾點:
1. 註釋文檔
2. 段落化
3. 多行語句段落化
4. 使用空格和空行
5. 方法不能太長,遵循30秒規則
6. 定義消息的傳遞,在註釋中體現
7. 簡短的命令行
8. 將比較的常數放在左方,以防止誤寫爲賦值語句
縮進通常參照Eclipse默認Format的縮進,Eclipse使用Ctrl+Shift+F快捷鍵來快速格式化當前文件代碼,默認縮進爲1個Tab即4個空格的字符長度。語句塊的{},其中{要跟在分塊開始語句以後,如:函數定義、if條件和循環語句等末尾,else語句不單獨另起一行。
例:
if (「abcd」.equals()){ …… }else{ …… }
原則上變量、類、常量數據和函數在其類型,修飾名稱之間適當空格並據狀況對齊。關鍵字原則上空一格,如:if ( ... ) 等。運算符的空格規定以下:"::"、"->"、"["、"]"、" "、"--"、"~"、"!"、" "、"-"(指正負號)、"&"(引用)等幾個運算符兩邊不加空格(其中單目運算符係指與操做數相連的一邊),其它運算符(包括大多數二目運算符和三目運算符"?:"兩邊均加一空格,在做函數定義時還可據狀況多空或不空格來對齊,但在函數實現時能夠不用。","運算符只在其後空一格,需對齊時也可不空或多空格。不管是否有括號,對語句行後加的註釋應用適當空格與語句隔開並儘量對齊。
原則上關係密切的行應對齊,對齊包括類型、修飾、名稱、參數等各部分對齊。另每一行的長度不該超過屏幕太多,必要時適當換行,換行時儘量在","處或運算符處,換行後最好以運算符打頭,而且如下各行均以該語句首行縮進,但該語句仍以首行的縮進爲準,即如其下一行爲「{」應與首行對齊。變量定義最好經過添加空格造成對齊,同一類型的變量最好放在一塊兒。以下例所示:
int Value;
int Result;
int Length;
Object currentEntry;
不得存在無規則的空行,好比說連續十個空行。程序文件結構各部分之間空兩行,若沒必要要也可只空一行,各函數實現之間通常空兩行,因爲每一個函數還要有函數說明註釋,故一般只需空一行或不空,但對於沒有函數說明的狀況至少應再空一行。
對於每個函數建議儘量控制其代碼長度爲53行左右,超過53行的代碼要從新考慮將其拆分爲兩個或兩個以上的函數。函數拆分規則應該一不破壞原有算法爲基礎,同時拆分出來的部分應該是能夠重複利用的。對於在多個模塊或者窗體中都要用到的重複性代碼,徹底能夠將起獨立成爲一個具有公用性質的函數,放置於一個公用模塊中。
頁寬應該設置爲80字符。源代碼通常不會超過這個寬度, 並致使沒法完整顯示, 但這一設置也能夠靈活調整. 在任何狀況下, 超長的語句應該在一個逗號或者一個操做符後折行. 一條語句折行後, 應該比原來的語句再縮進2個字符。
對變量最好始終進行定義初始化,以減少不容易調試的bug的產生。
對文件中的警告,應儘可能或極力去消除警告,對於暫時長時不使用的函數,可使用添加@SuppressWarnings("unused")來去除警告或在配置庫(VSS、CVS、SVN)保存有備份的狀況下暫時刪除該方法。
對於比較應把常量放在前面,以避免誤寫爲賦值語句或者形成沒必要要的空指針錯誤。
例:
while (0 == flag){ …… } if (「abcd」.equals(sName)){ …… }
減小沒必要要的語句和局部變量定義或冗餘的寫法
例:
冗餘的寫法:
boolean bResult = false; if ( a == b){ bResult = true; }else{ bResult = false; } return bResult;
正確的寫法:
return a == b;
冗餘的寫法:
if (bIsFile == fasle) { …… }
正確的寫法:
if (! bIsFile) { …… }
1. 使用 get/set 對類屬性進行訪問,這是Java 社區的核心編碼規範。
2. 使用 is 前綴表示一個布爾變量和方法。
a) isUsed, isEmpty,isVisible,isFinished
i. 有時也可使用 has,can,should:
1. boolean hasLicense();
2. boolean canEvaluate();
3. boolean shouldAbort = false;
3. 在查詢方法中應使用 find 做爲前綴
vertex.findNearestVertex();
matrix.findSmallestElement();
4. 使用 initialize 作爲對象初始化的方法前綴,也能夠簡寫爲init
initializeFiles();
init();
initFontSet();
5. 對於對象集合, 變量名稱應使用複數。
Collection<Point> points;
int[] values;
6. 對於抽象類,應該使用 Abstract 前綴。
i. AbstractReportBuilder,AbstractBeanFactory
7. 對於表示編號的變量,應加 No 後綴。
a) tableNo, userNo,employeeNo
8. 常在一塊兒使用的對稱詞彙,這些詞彙一塊兒使用,方法的表達意圖天然能夠互相推測和演繹。
get/set, add/remove, create/destroy, start/stop,
insert/delete, increment/decrement, begin/end, first/last,up/down, min/max, next/previous, old/new, open/close,show/hide, suspend/resume
9. 避免使用否認布爾變量
a) bool isError; // 避免: isNoError
b) bool isFound; // 避免: isNotFound
10. 異常類應該使用 Exception 作爲後綴。
a) AccessException, RuntimeException
缺省接口實現應該使用 Default 前綴
class DefaultTableCellRenderer
implements TableCellRenderer {
…
}
11. 對於單例類(Singleton),應該使用getInstance 方法獲得單例。
public class UnitManager { private final static UnitManager instance new UnitManager(); private UnitManager() { ... } public static UnitManager getInstance(){ return instance_; } }
12. 對於工廠類,進行建立對象的方法,應該使用 new 前綴
class PointFactory { public Point newPoint(...) ... } }