IBM GDC DL
Teambiz后臺開發規范
(2012年3月9日修訂版)
撰寫:何楊
2012年3月9日
1. 包的命名
包名應全由小寫單詞組成,如com.dalpha.common.gui,com.dalpha.biz.supply
2. 接口的命名
Java接口采用統一的前綴I,如IService.java
3. 接口實現類的定義
接口實現類建議采用統一的后綴Impl,如:ServiceImpl
4. 抽象類,普通類的定義
可視化類:功能描述后加上相應的后綴。
例如:
對于對話框,功能加Dlg,如:ContractDlg
對于面板,功能加Panel,如:ContractPanel
對于按鈕,功能加Btn,如:deleteBtn
對于實用工具類,功能加Util后綴,如:FileUtil
對于線程類,功能加Thread后綴,如:TimerThread
對于消息主題,功能加Listener后綴或者sender后綴,如:NegotitiaonListener
5. 常量定義
關于常量的命名方法,在JAVA代碼中,無論什么時候,均提倡應用常量取代數字、固定字符串。也就是說,程序中除0,1以外,盡量不應該出現其他數字。常量可以集中在程序開始部分定義或者更寬的作用域內,名字應該都使用大寫字母,并且指出該常量完整含義。如果一個常量名稱由多個單詞組成,則應該用下劃線“_”來分割這些單詞。
舉例:定義最大時間常量,如下:
Public static final String Max_Time;
或者Public static final String MAX_TIME。
6. 變量定義
命名規則如下:
一個變量名應該是可讀的,易記的和恰如其分的。
所有變量在其作用域內必須有一個唯一的名稱,不要試圖用大小寫來區分不同的變量。
變量的名稱一般應該是名詞形式,要能體現出變量的作用,不要使用毫無意義的名稱給方法或者變量命名。
使用駱駝命名法給變量命名。變量名以小寫字母開頭,以后每遇到一個單詞則將其首字母大寫。變量名中最重要的詞應該放在最前面。如revenueTotal(總收入), expenseAverage(平均支出)
在體現變量的功能前提下縮短變量的長度,變量名為6-8個字符最佳,最好不要超過18個字符。
縮寫要少用,除非它有唯一的意義并達成了廣泛共識。避免使用程序語言中的保留字和關鍵字。
在循環和多重循環中才能使用單字符的變量名,如i,j,k,切勿在其它場合中使用它們。
當變量是一個集合如數組,鏈表或哈希表時建議采用s后綴以明示出來,當其不是時切勿采用。也可以采用數組后綴s,鏈表后綴list,哈希表后綴map的做法,如users,userList,userMap。
常用的變量命名
數量:count
序列:index
總和:sum/total
序號:id
名稱:name
大小:size
返回值:retval
圖表:chart/graph/diagram
實體:entity
標志:symbol
平均值:average
狀態:status
幾何尺寸:width,height
布爾變量的命名
一般來說在Java編程中不推薦使用匈牙利命名法,即為每一個類型的變量名前加上其類型的前綴的做法,但布爾變量例外。
布爾變量一般以單詞is,has,can,not開頭,如isMale,isLoggedIn, hasChild, canBeSerialized,notFound.
常用的布爾變量后綴:done,error,passed,valid,found,success,ok
變量名中的常見對仗詞
Begin/end
First/last
Locked/unlocked
Min/max
Next/previous(prev)
Old/new
Opened/closed
Visible/invisible
Source/target
Source/destination
Up/down
可視化組件變量的定義為功能加可視化后綴,比如deleteBtn
7. 參數定義
同普通變量定義一致。
8. 方法定義
函數(方法)名的首個單詞應該是動詞,因為它表示一個動作,會執行一個或多個操作。
使用具有描述性的名稱,命名要能準確的表示出函數的功能和用途,采用動詞加名詞的形式,且長度為6-18個字符。如getCurrentPage, isPrimeNumber,printArray
一切函數都應該以小寫字母開頭,無論是常規函數還是靜態函數,無論其是公有,私有還是保護。
現舉例如下:
C:createNegotitaion()
R:getNegotitaion(),searchNegotitaion()
U:updateNegotitaion()
D:deleteNegotitaion()
H:handleDeal()
表示判斷的:isActive(),hasBuyer(),canDelete()
9. 注釋的寫法規范
注釋用來描述代碼中復雜晦澀的部分,它必須能清楚的解釋代碼的意圖而不僅僅是復述代碼,如果有些事情在代碼中不是很明顯,那么就必須要加入注釋。不要把注釋當作不恰當的包名,類名,變量函數名的補救措施,它只是代碼的有效補充。
一般來說,在定義,分支,循環和重要的語義段前都要加上注釋,在嚴格的商業項目中,
注釋一般占到代碼量的1/3左右。多行注釋使用/*….*/,單行注釋使用//。類,公有函數和成員變量一定要有清晰而規范的注釋。
類的注釋:
類的注釋主要包含以下幾點:功能,作者,創建時間,修改者,修改時間
/**
* 功能: XXXXXXXX
* 作者: XXX
* 時間: XXXX-XX-XX XX:XX:XX
* 修改者: XXX
* 修改時間: XXXX-XX-XX XX:XX:XX
*/
函數的注釋:
函數的注釋主要包含以下幾點:功能,作者,創建時間,參數說明
/**
* 功能: XXXXXXXXXXXXXXXXXXXXXXXX
* 作者: XXX
* 時間: XXXX-XX-XX XX:XX:XX
* 參數說明: XXXXX
*/
成員變量和局部變量的注釋:
對于成員變量和重要的局部變量,注釋應采用如下形式:
// 功能說明,創建者,創建時間
如果進行了修改,修改者應該改寫成如下形式
// 功能說明,創建者,創建時間;修改說明,修改者,修改時間
循環和分支代碼段的注釋:
一般來說循環和分支都需要注釋,它們的注釋主要包含以下幾點:條件說明,功能說明
/******************
* 條件說明,功能說明
******************/
10. Java 格式化及良好的布局
如果你在編程過程中自覺使用空格,TAB,斷行,你就可以提高代碼的層次性,通過這
樣代碼的可讀性就能得到有效提高。
有些人在編寫代碼時依賴Ctrl+Shift+F來規整Java代碼,這是一種不好的習慣,首先它
縱容了懶惰的惡習;其次Ctrl+Shift+F不是任何時候都好用的,如在使用非Eclipse的文本編輯器編寫網頁中的JS代碼時,缺乏自動格式化會讓你覺得舉步維艱。如果在平常編程中自覺的使用正確的縮進,即使是在記事本上你也能將代碼保持良好的層次。
適當使用空行來區分不同的語義段,其實空行也是一種注釋,它意味著舊的代碼段的結
束和新的代碼段的開始。
良好的布局并不影響執行速度,內存使用等程序性能,但它會讓你在日后理解代碼,檢查代碼以及修改代碼變得更容易,也是其他人在你缺位時更容易閱讀理解和修改你的代碼,編排出色的代碼會帶來視覺上和思維上的愉悅,這是非程序員不能感受到的,而精雕細琢代碼并使之達到美觀的程序員們卻會從這一過程中得到藝術的滿足。
11. Java 程序設計約定
有許多的有關 Java 代碼可維護性和可改進性的重要約定和標準。99.9% 的時間里,面向他人,面向你的開發同事編程要比面向機器編程重要得多。使你的代碼為別人所理解是最重要的。
約定目標 | 約定 |
存取成員函數 | 考慮對數據庫中的字段使用滯后初始化 使用存取函數獲得和修改所有字段 對常量采用存取函數 對于集合,加入成員函數來插入和刪除項 一旦可能,將存取函數置為被保護類型,不是公共類型 |
字段 | 字段永遠為私有類型 不要直接訪問字段,應使用存取成員函數 不要使用靜態常量字段(常量),應使用存取成員函數 不要隱藏名字 一定要初始化靜態字段 |
類 | 最小化公共和保護接口 在開始寫代碼之前定義一個類的公共接口 按以下順序聲明一個類的字段和成員函數: 構造函數 公共成員函數 被保護成員函數 私有成員函數 私有字段 |
局部變量 | 不要隱藏名字 一行代碼只聲明一個局部變量 用一個行內注釋說明局部變量 在使用局部變量之前聲明它 僅將局部變量專注于一件事 |
成員函數 | 給代碼加上注釋 給代碼分段 使用空白,控制結構之前用一個空行,成員函數之前用兩個空行 一個成員函數應能在 30 秒內讓人理解 寫短小單獨的命令行 盡量限制成員函數的可見性 說明操作的順序 |
12. Java 命名約定補充
除了以下幾個特例之外,命名時應始終采用完整的英文描述符。此外,一般應采用小寫字母,但類名、接口名以及任何非初始單詞的第一個字母要大寫。
檢查點:
??使用完整的英文描述符
??采用適用于該領域的術語
??采用大小寫混合使名字可讀
??盡量少用縮寫,但如果用了,要明智地使用,易于理解。
??避免使用長的名字(最好小于18個字母)
??避免使用類似的名字,或者僅僅是大小寫不同的名字
??避免使用下劃線
操作項 | 命名約定 | 示例 |
實參/參數 | 使用傳遞值/對象的完整的英文描述符 | customer, account |
字段/屬性 | 字段采用完整的英文描述,第一個字母小寫,任何中間單詞的首字母大寫。 | firstName, lastName, warpSpeed |
布爾型的獲取成員函數 | 所有的布爾型獲取函數必須用單詞 is 做前綴。如果你遵守前文所說的布爾字段的命名標準,那么你只需將字段名賦給它即可。 | isPersistent(), isString(), isCharacter() |
類 | 采用完整的英文描述符,所有單詞的第一個字母大寫。 | Customer, SavingsAccount |
編譯單元文件 | 使用類或接口的名字,或者如果文件中除了主類之外還有多個類時,加上前綴 java 來說明它是一個源碼文件。 | Customer.java, SavingsAccount.java, Singleton.java |
組件/ 部件 | 使用完整的英文描述來說明組件的用途,末端應接上組件類型。 | okButton, customerList, fileMenu |
構造函數 | 使用類名 | Customer(), SavingsAccount() |
異常 | 通常采用字母 e 表示異常。第二層用ex | e, ex |
靜態常量字段(常量) | 全部采用大寫字母或者首字母大寫的方式,單詞之間用下劃線分隔。一個較好的方法是采用靜態常量獲取成員函數,因為它很大地提高了靈活性。 | MIN_BALANCE, DEFAULT_DATE Max_Time |
獲取成員函數 | 被訪問字段名的前面加上前綴 get。 | getFirstName(), getLastName(), getWarpSpeeed() |
接口 | 采用I前綴加上完整的英文描述符說明接口封裝,所有單詞的第一個字母大寫。 | IRunnable, IContactable, IPrompter, ISingleton |
局部變量 | 采用完整的英文描述符,首字母小寫,但不要隱藏已有字段。例如,如果有一個字段叫 firstName,不要讓一個局部變量叫 firstName。 | grandTotal, customer, newAccount |
循環計數器 | 通常采用字母 i,j,k 或者 counter 都可以接受。 | i, j, k, counter |
包 | 采用完整的英文描述符,所有單詞都小寫。 | com.ambysoft.www. persistence.mapping |
成員函數 | 采用完整的英文描述說明成員函數功能,第一個單詞盡可能采用一個生動的動詞,第一個字母小寫。 | openFile(), addAccount() |
設置成員函數 | 被訪問字段名的前面加上前綴 set。 | setFirstName(), setLastName(), setWarpSpeed() |
13. Java 常用開發術語表
A
o Abstract class:抽象類
o Abstract method:抽象方法
o Annotation:注釋
o Anonymous class:匿名類
o API(Application Programming Interface):應用編程接口,由方法和語言構成的庫.
o ArrayList:實現了List接口的動態數組
o Assertion:斷言
o Atrribute map:屬性映射
o Autoboxing:自動裝箱,表示一個內置類型如int和它的包裝類如Integer之間的自動轉換
B
o Boolean function:布爾函數
o Bytecode:字節碼
C
o Casting:類型強制轉換
o Channel:頻道
o ClassCastException:當一個對象引用強制轉換程一個不兼容的類型時出現的異常.
o Collection:一個表示對象組或集合的接口
o CSV(Comma-separated values):一種用于存儲表格數據的文件形式
o Complier:編譯器
o Compose:合成
o Composite function:復合函數,通過多個函數創建的一個函數
D
o Decimal:十進制
o Deep:深度
o DOM(Document Object Model):文檔對象模型,一種采用樹形表示來處理XML數據的API.
o Database:數據庫
E
o Edge:邊
o Element:元素,XML文檔中的一個節點.
o Encapsulation:封裝
o End tag:結束標簽
o Enum:枚舉
o Escaping:轉義
F
o Function:函數
o Fuzzy search:模糊搜索
G
o Generic:泛型
o Graph:圖
o GUI:用戶圖形界面
o Grid computing:網格計算
o Group:組
H
o HashMap:一個將鍵值映射到值的查找對象
o Heap memory:堆內存
o HTML(Hyper Text Markup Language):超文本標記語言
o HTTP(HyperText Tranfer Protocol):超文本傳輸協議
I
o Inheritance:繼承
o Inner class:內部類
o Iterator:允許迭代到任何Collection類的一個接口
J
o JDBC(Java Database Connectivity):java數據庫連接,一種屬于Java核心庫的用于操作關系數據庫的API.
o JDK(Java Development Kit):java開發工具包
o JRE(Java Runtime Environment):java運行時環境
o JSP(Java Server Page):java服務頁
o JVM(Java Virtual machine):Java虛擬機
o JavaDoc:屬于JDK的一種文檔生成工具
o JavaScript:運行于客戶端,用于HTML處理的一種輕量級教本語言,語法部分類似于Java.
L
o Layout:布局
o Lexical analysis:詞法分析
o Linked List:鏈表
M
o Matcher:一個用于正則表達式模式匹配的Java類
o Metadata:元數據
o Millisecond:微妙
N
o Namespace:命名空間
o Neural network:神經網絡
o Node:節點
O
o Object-oriented programmming:面向對象編程
o Object pool:可以從中獲得對象的一個實例池
o Origin:原點
o Override:子類覆寫父類的方法
P
o Parser:分析器
o Patch:補丁
o Pattern:模式
o Polymorphism:多態性
o Port:端口
o Predicate:謂詞
o Prefix:前綴
o Procedural language:過程式語言,如C
o Property:屬性
R
o Real time:實時
o Recursive:遞歸
o Reference:引用
o Reflection:反射
o Regular expression:正則表達式
o Relative:相對
o Resource:資源
o Runnable:多線程編程使用的一個接口.
S
o Syntax:語法
o Screen scraping:屏幕抓取
o Split:分割
o State:狀態
o Static:靜態
o Sequence:序列
o Swing:構建在AWT上更高級的圖形用戶界面
o Synchronized:同步,用于線程安全協作的技術
T
o Tag:標簽
o Thread:進程
o Tiger : Sun給Java1.5的代號
o Token:標記
o Translation:平移
o Triple:三元組
o Type:類型
U
o Unicode:統一字符界面
o Unit testing:單元測試
V
o Visitor pattern:訪問者模式
W
o WAR(Web Application Archive):Web應用程序歸檔
o Web Service:Web服務
o Weight:權
o Well-formed:格式良好的
o Whitespace:空白符
X
o XML(Extensible Markup Language):一種描述分級數據結構的文本標記語言