BizWorks Toolkit支持通過配置化的方式,在項目中動態維護自定義的研發規約,這份配置文件即為規約掃描配置,文件所在路徑為.bizworks/inspections.yaml
。
前提條件
BizWorks Toolkit版本大于等于2.2.0。
步驟一:新建規約掃描配置文件
如果您還沒有配置規約掃描配置文件,可以在項目根目錄或.bizworks
目錄,通過單擊 新建文件,具體路徑如下圖所示。新建后的配置文件會自動打開,且配置文件會自動創建在 .bizworks/inspections.yaml
目錄。
如果規約掃描配置文件已經存在,在項目根目錄或.bizworks
目錄,單擊 后,會直接打開該文件。
上圖配置文件中,默認生成的配置項對應的校驗規則如下表所示(部分配置項通過enabled: false
關閉了校驗功能):
規則類型 | 默認提示信息 | 規則說明 |
指定包路徑下存放DTO的Converter類, Converter類名按指定的后綴命名。 | DTO的Converter類名不滿足命名規范,應該以“ |
|
DTO的Converter類中需要包含指定的方法名。 | DTO的Converter類中需要包含指定的方法名:toDto()、toEntity()命名。 | 指定方法名toDto()、toEntity()為可配置項。 |
指定包路徑下存放DO的Converter類, Converter類名按指定的后綴命名。 | DO的Converter類名不滿足命名規范,應該以“ |
|
DO的Converter類中需要包含指定的方法名。 | DO的Converter類中需要包含指定的方法名:toDo()、toEntity()命名。 | 方法名toDo()、toEntity()為可配置項。 |
指定包路徑下存放聚合根、實體對象、值對象。 | 聚合根、實體對象、值對象未放在指定包路徑下。 |
|
聚合根類名按指定后綴命名。 | 聚合根類名不滿足命名規范,應該以“ | 后綴“ |
實體對象類名按指定后綴命名。 | 實體對象類名不滿足命名規范,應該以“ | 后綴“ |
值對象類名按指定后綴命名。 | 值對象類名不滿足命名規范,應該以“ | 后綴“ |
指定的包路徑下,枚舉類名按指定后綴命名。 | 枚舉類名不滿足命名規范,應該以“ |
|
指定包路徑下存放Repository類, Repository類名按指定的后綴命名。 | Repository類名不滿足命名規范,應該以“ |
|
domain層指定包路徑下存放的Repository需要是接口。 | domain層指定包路徑下存放的Repository需要是接口。 |
|
自定義包路徑下類名的按指定后綴命名。 | “ |
|
自定義包路徑下類是實現類。 | “ |
|
自定義包路徑下類是接口或抽象類。 | “ |
|
指定包路徑下存放Mapper。 | Mapper未構建在指定目錄下。 |
|
指定包路徑下存放Mapper,Mapper類名按指定的后綴命名。 | Mapper類名不滿足命名規范,應該以“ |
|
指定包路徑下存放數據對象,數據對象類名按指定的后綴命名。 | 數據對象類名不滿足命名規范,應該以“ |
|
指定包路徑下存放Repository實現類, Repository實現類名按指定的后綴命名。 | Repository實現類名不滿足命名規范,應該以“ |
|
指定包路徑下存放的Repository需要是實現類。 | 指定包路徑下存放的Repository需要是實現類,不應該是接口。 | 指定包路徑為可配置項。 |
指定包路徑下存放DTO類, DTO類名按指定的后綴命名。 | DTO類名不滿足命名規范,應該以“ |
|
步驟二:修改默認配置
通過上述步驟一:新建規約掃描配置文件操作創建的規約掃描配置文件,其內容來源于默認模板,包含一些默認開啟或關閉的示例。其中package
的com.alibaba.bizworks.demo
需要替換為項目的真實package
配置文件才會生效。
您可以通過快捷鍵觸發替換操作:
如果您使用的是Mac系統:command+R
如果您使用的是Windows系統:Ctrl+R
步驟三:執行規約掃描驗證
在全局或目錄執行規約掃描驗證
打開IDEA,在項目左側導航欄的目錄上,單擊右鍵后,選擇 (按目錄觸發執行驗證),您也可以在根目錄觸發(全項目級別的執行驗證)。
下圖為執行規約掃描驗證的截圖示例:
在Editor中即時校驗
在Editor編輯過程中,界面會顯示即時校驗反饋。
配置管理
在項目下方的配置管理頁簽,列出了項目中的規約掃描配置信息,同時也支持通過雙擊或右擊菜單跳轉。
在規約掃描配置有變動時,您可以單擊重新加載規約掃描配置重新掃描發現項目中的配置。
規約掃描配置生效
規約掃描配置生效的時間點或方式如下:
項目啟動自動加載。
修改規約掃描配置文件后自動重新加載。
通過菜單手動加載:
。說明當規約掃描配置文件并非由IDEA可感知的變動引起時(例如:命令行
git
同步其他協作者的改動,外部其他Editor修改等),您如果發現當前校驗規則與預期不符,可以嘗試手動重新加載。
規約掃描配置內容說明
BwBasicClassRule
(基礎的類校驗規則)
完整的規約掃描配置規則示例如下(在默認的模板中也包含如下示例規則):
# 下面這個是關閉的完整字段配置示例
# name 必填
- name: "完整 BwBasicClassRule Inspection示例"
# 非必填;項目內Inspection編碼, 不可重復,用于區分規則,如果不填則會根據內部規則生成
code: "demoCustomRule"
# 非必填;規則描述
description: "Simple Inspection"
# 非必填;提示信息, 內置變量
tip: "類不符合要求,后綴應為"
# 非必填;類型,內置類型直接使用類型名。默認為 BwBasicClassRule
type: "BwBasicClassRule"
# 非必填;是否啟用, 默認啟用;當前為示例規則,僅容配置參考,故設置為 false
enabled: false
# 非必填;參照 IntelliJ 級別配置。嚴重程度,默認 使用 defaultSeverity 配置 , 可選值為 error,warning,weak (weak warning含義)
severity: error
# 必填;約束的作用域
scopes:
# type 默認是 include,可選 exclude
- type: include
package: "com.alibaba.bizworks.client.dto"
# 類型,任意匹配即可
defTypes:
- "class"
- "abstract"
- "interface"
- "enum"
# 后綴
suffixes:
- "DTO"
- "Repository"
- "Enum"
annotations:
# 多條 annotation 之間是或的關系
- qualifiedName: "com.alibaba.bizworks.core.specification.ddd.ValueObject"
attributes:
- name: "isValueObject"
value: "true"
# 多條 scope 之間是 and 的關系,在上一條的基礎上進一步縮小范圍。同時,是否沖突由用戶自己控制
- type: exclude
defTypes:
- "interface"
# 必填;檢查約束不支持多條,但單條上面每個配置可以支持按需配置
constraint:
package: "com.alibaba.bizworks.client.dto"
# 約束下復數形式同樣支持配置多項,規則仍是任意一個匹配
suffixes:
- "DTO"
- "Repository"
- "Enum"
annotations:
- qualifiedName: "com.alibaba.bizworks.core.specification.ddd.ValueObject"
attributes:
- name: "isValueObject"
value: "true"
defTypes:
- "class"
- "abstract"
- "interface"
- "enum"
# 約束項指明要求所有都滿足的,則會匹配所有
containAllMethods:
- "toDto"
- "toEntity"
通過閱讀注釋中說明信息,您會發現其中有很多內容都是有默認值可以不配置的,所以默認模板中大量的規則實際都是簡化后的簡單規則,具體如下所示:
- name: "指定包路徑下存放DTO的Converter類,Converter類名按指定的后綴命名"
scopes:
- package: "com.alibaba.bizworks.demo.*.app.converter"
constraint:
suffixes:
- "Converter"
常見問題
當界面出現“規約掃描配置加載過程中存在錯誤”提示時應如何處理?
在規約掃描配置加載過程中,如果配置文件缺失,或配置文件內容有誤,IDEA右下角會有錯誤提示,請參照提示信息確認配置文件內容正確。
提示一:配置文件不存在!規約掃描配置加載失敗,保留現狀。
提示二:配置解析出錯,請檢查配置。
提示三:錯誤規則。具體請參見下圖。
如果是配置文件缺失或配置文件格式等原因導致配置整體解析錯誤,則IDEA會保留在重新加載前生效的規則。
如果配置文件解析正常,但部分規則內容不符合配置約定,是無效規則(比如缺少必要的
name
等),則會忽略不符合配置要求的規則,加載生效其余有效的規則。