前言
一種工具被發明出來,那麼針對這種工具的各種使用規則、條條框框就随之而來。無規矩不成方圓,無制度則無國家,無風格不成代碼!治國有國法、排兵布陣有章法、那麼寫代碼也有它界内通用的不成俗的約定。最近剛好在看alibabaJava開發手冊,隻聽說是業界内通用的Java代碼規範小紅書。這不也剛轉入Java的陣營,怎的也不能落人之後啊。樹要皮,人要臉,程式員的臉不就你寫的那一手老代碼嘛!!此書分為好幾大塊,我沒有讀完,但隻針對基本Java代碼規範做了閱讀,然好記性不如爛筆頭,遂以本文以錄之。
命名風格
類、接口
- 統一采用 UpperCamelCase風格
// 正确的命名
class People {}
// 錯誤的命名
class people {}
- 抽象類
// 以```Abstract```或者```Base```指令開頭
// 正确的命名
abstract class AbstractPeople {}
//錯誤的命名
abstract class People {}
- Service接口
// 命名應當以 Service結尾
// 正确的
interface OrderService {}
// 錯誤的
interface OrderServiceInterface {}
- 實作類接口
// 實作接口應當以 impl 結尾
// 正确的
class OrderServiceImpl {}
// 錯誤的
// 非以Impl結尾的類名
- Enum類
// enum類使用 enum結尾
// 正确的
enum OrderStatusEnum {}
- 異常類
// 以Exception結尾
// 正确的
class ParseTextException {}
- Test類
// 正确的
class OrderServiceTest {}
- 工具類
// 工作類那麼以Utils結尾
// 正确
class MoneyUtils {}
- 資料傳輸對象(DTO)
分層設計的時候,通常有一個類來負責傳遞資料,從Controller通過轉化傳遞到Service 或者 從Service傳遞到Spi,或者用以不同模闆的資料傳遞。那麼這種對象稱之為
DTO(Data Transfer Object)
// 命名方式以DTO結尾
// 必須實作 Serializable 接口
class UserInfoDTO implements Serializable {
// 必須有 定義 serialVersionUID
private static final long serialVersionUID = 8300693945573325343L;
//getter setter 必須有
// 必須有 toString方法
public void toString() {
}
}
- 複雜聚合對象(BO)
有些業務場景十分的複雜,要用一個對象來聚合其他幾個對象,來形成一個業務對象。比如訂單商品BO,在這個BO裡 既要有商品的資訊、也要有活動的資訊。那麼這種對象可以稱之為
BO(Business Object)
// 命名方式以BO結尾
// 必須實作 Serializable 接口
class OrderComputeBO implements Serializable {
// 必須有 定義 serialVersionUID
private static final long serialVersionUID = 8300693945573325343L;
//getter setter 必須有
// 必須有 toString方法
public void toString() {
}
}
- 接口輸出VO
通常以用Api傳回的資料結構,以VO結尾來指令(Value Object)
// 命名方式以VO結尾
// 必須實作 Serializable 接口
class GoodsInfoVO implements Serializable {
// 必須有 定義 serialVersionUID
private static final long serialVersionUID = 8300693945573325343L;
//getter setter 必須有
// 必須有 toString方法
public void toString() {
}
}
常量
定義一個常量、幾乎所有語言潛移默化都是大寫,帶下劃線、每個單詞用下劃線分開,表達清楚,見詞明意。
// 下面是一個用于定義預設的分享開頭
private static final int DEFAULT_SHARE_SWITCH = 1
變量、方法、參數
這個國際通用、一律采用的是
lowerCamelCase
的命名規則、盡量的表達出意思。
/**
* 1:方法以動詞開始、表示某個行為,,見名明意
* 2:方法内參數用 ","隔開,每個後面有一個空格
*/
public String getUserBaseInfo(String name, int age) {
String baseInfo = name + age;
return baseInfo;
}
包名
- 統一使用小寫、用點号分隔、使用單數
代碼格式
縮進
- 采用 4 個空格縮進,禁止使用 Tab 字元。
注釋
- 注釋的雙斜線與注釋内容之間有且僅有一個空格。
- 類上的注釋要表明作者、和日期
- 方法上面要注釋要表明各參數的意義、以前方法的說明
/**
*@author Savey
*@date 2016/10/31
*/
class People {
/**
* 功能:吃某種食物
* @params food 食物
*/
pulic void eat(Food food) {
// 方法體内 單行 用 // 注釋
/*
* 多行使用\/**\/ 注釋說明
*/
food.getName();
}
}
代碼塊
- 一行不能超過120個字元
- 第二行相對第一行縮進 4 個空格,從第三行開始,不再繼續縮進
- 運算符與下文一起換行
- 法調用的點符号與下文一起換行
- 方法調用中的多個參數需要換行時,在逗号後進行。
- 在括号前不要換
- 方法入參數要有空格分開
- 單個方法的總行數不超過 80 行
其他
禁止:有反人倫、道德、地域歧視、種族歧視、性别歧視等一切違背社會主次核心價格觀的觀點或者描述性文字出現在代碼裡
上面為普通Java代碼的編寫規範,條條框框還是很多的,方方面面都說到了。下次再補充Mybatis、Sql、等規範!
作者:M78-Seven,轉載請注明原文連結