1.規(guī)范的意義和作用

· 編碼規(guī)范可以最大限度的提高團隊開發(fā)的合作效率

· 編碼規(guī)范可以盡可能的減少一個軟件的維護成本 , 并且?guī)缀鯖]有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護

· 編碼規(guī)范可以改善軟件的可讀性,可以讓開發(fā)人員盡快而徹底地理解新的代碼

· 規(guī)范性編碼還可以讓開發(fā)人員養(yǎng)成好的編碼習慣,甚至鍛煉出更加嚴謹?shù)乃季S

2.代碼倉庫規(guī)范

2.1公共組件

· 公共組件通常指Java庫,提供特定問題的處理程序包

· 公共組件倉庫地址:https://git.company.com/java-library-group

· 公共組件的坐標命名規(guī)范

分組編號:<groupId>com.company.library</groudId> 固定取值

組件名稱:<artifactId>name</artifactId> name根據(jù)組件名稱定義

組件版本:<version>x.y.z</versio> x.y.z根據(jù)組件實際版本情況定義

2.2服務組件

· 服務組件通常指可以獨立部署,運行,維護的服務程序包

· 服務組件倉庫地址:https://git.company.com/server-microservice-group

· 應用組件的坐標命名規(guī)范

分組編號:<groupId>com.company.server</groudId>固定取值

組件名稱:<artifactId>name</artifactId> name根據(jù)組件名稱定義

組件版本:<version>x.y.z</versio> x.y.z根據(jù)組件實際版本情況定義

3開發(fā)環(huán)境規(guī)范

· 開發(fā)環(huán)境:JDK1.7+

· 開發(fā)工具:IntelliJ IDEA 2017(安裝Lombok Plugin)

· 構(gòu)建工具:Maven3.x

· 代碼管理工具:Git /TortoiseGit

4.項目結(jié)構(gòu)規(guī)范

4.1簡述

一個項目對應代碼倉庫中的一個倉庫,項目結(jié)構(gòu)是指一個基于Maven創(chuàng)建的項目目錄結(jié)構(gòu)。公共組件項目,通常會創(chuàng)建一個Maven普通項目。服務組件項目,通常會創(chuàng)建一個Maven聚合項目,并在聚合項目目錄下創(chuàng)建多個繼承Maven聚合項目的Maven模塊,它們一起作為服務組件項目的組成部分。

4.2項目名

· 要求

英文名稱,作為倉庫,項目,項目根目錄,組件(公共組件,服務組件)的名稱

中文名稱,用于代碼倉庫的描述

項目名稱和代碼倉庫的名稱保持一致

· 定義

項目名稱通常由團隊負責人確定

· 示例

項目中文名:人臉數(shù)據(jù)倉庫

項目英文名:data-warehouse-face

項目目錄名:data-warehouse-face

項目倉庫地址:https://git.company.com/server-microservice-group/data-warehouse-face.git

初始版本:1.0.0

示例是一個服務組件,根據(jù)上面定義的信息確定該服務組件的Maven坐標命名:

<groupId>com.company.server</groupId><artifactId>data-warehouse-face</artifactId><version>1.0.0</version>

4.3模塊命名

· 要求

模塊名稱:{項目名稱}-{模塊名稱} 模塊名稱簡潔體現(xiàn)職責

模塊名字作為模塊組件的名稱

· 示例

· 人臉數(shù)據(jù)倉庫的數(shù)據(jù)接入模塊名稱:data-warehouse-face-access

4.4項目目錄

· 項目目錄遵循Maven約定目錄格式

4.5源碼目錄

· 源碼目錄指:{項目目錄}/src/main/

· 打包定義目錄:src/main/assembly

· 代碼目錄:src/main/java

· 資源目錄:src/main/resources

/db:數(shù)據(jù)庫腳本歸檔

/data:內(nèi)部依賴數(shù)據(jù)歸檔

· 文檔目錄:src/main/docs

· 腳本目錄:src/main/bin

run-manage.sh 運行管理腳本(通過參數(shù)start, stop, status, help info控制程序運行)

sh:服務組件啟動腳本

sh:服務組件停止腳本

5.編碼規(guī)范

5.1包規(guī)范

· 項目基本包:com.company.{項目英文名(較長時適當簡化)}.{模塊名(可選)}

· config:配置類

· startup:與服務啟動相關的類

· client:提供客戶端實現(xiàn)的相關類

· common:公共類,定義常量類,組件

· entity: 數(shù)據(jù)庫相關的實體類

· model:數(shù)據(jù)模型類(參數(shù)模型,數(shù)據(jù)傳輸模型等)

· control:控制層接口

· service: 服務層

· dao:數(shù)據(jù)庫訪問層

5.2日志記錄

· 統(tǒng)一使用SLF4j接口

5.3異常處理

· 運行時異常:通過參數(shù)檢查等方式避免或拋出運行時異常,日志記錄

· 檢查異常:檢查異常需要捕獲,處理,日志記錄

5.4接口定義

· 原則

接口地址定義表明用意

接口地址定義清晰,簡潔,無歧義

同一個服務組件的接口定義具有一致性

· 格式

控制類的頂層地址格式:/{頂層分類名},例如:/library 人員庫相關接口的頂層地址

接口定義使用Swagger的API注解說明

標注完整的請求信息,請求方法,請求地址,參數(shù)可選性,接口描述

· 請求方式

GET URL-Params

POST Form-Data

POST RequestBody(JSON格式)

POST Mulitpart

· 響應方式

統(tǒng)一的響應模型

5.5輔助工具

· 字符串處理:apache common-lang3

· 時間日期處理:joda-time

· JSON處理:Gson,F(xiàn)astjson

· 集合擴展工具:guava

· 文件和流處理:commons-io

· 編解碼:commons-codec

· 建議:盡可能使用開源組件

5.6代碼注釋

· 類,接口,枚舉頂層注釋

· 接口方法注釋

· 靜態(tài)方法注釋

· 公開方法注釋

· 類的屬性字段注釋

· 常量注釋

· 不限于以上

6.代碼控制規(guī)范

6.1拉取原則

· 強制

每日開始工作拉取

· 約定

提交之前拉取

6.2提交原則

· 強制

提交代碼必須構(gòu)建成功(比如:編譯,打包成共)

提交代碼必須完整(比如:少提文件)

提交代碼必須忽略到本地臨時文件(比如:target, logs, .idea, *.iml,dist 等)

· 約定

完成一個功能提交

修改一個Bug修改提交

解決沖突提交

每日結(jié)束工作提交

6.3提交注釋

· 強制

中文填寫注釋

注釋反映本次提交變更情況

· 約定

注釋描述添加前綴,前綴如下

[創(chuàng)建] 通常在項目創(chuàng)建時使用

[新增]

[修改]

[刪除]

[修復-number] 修復Bug使用,number是Bug編號

7.構(gòu)建規(guī)范

7.1公共組件構(gòu)建規(guī)范

· 構(gòu)建輸出組件包

· 構(gòu)建輸出組件源碼包

· 構(gòu)建發(fā)布到公司私有倉庫

7.2服務組件構(gòu)建規(guī)范

· 服務組件包命名:{組件名稱}-{版本號}-bin.zip

· 構(gòu)建輸出到工程根目錄下的dist/{組件名稱}-{yyyyMMddHH}目錄