分層與對象命名規范
如上圖所示,系統劃分成3個層:Controller層,Service層,Domain層
Controller層:
Controller層是接入層,提供對外或者前端的接口,該層主要作用是提供對外接口的封裝。基于CQRS分離模式,該層對象主要由Command,Query和Vo組成。其中:
Command:
Command代表命令接口,接口會改變系統的數據,一步需要考慮事務。
Query:
Query代表查詢接口,接口只會查詢數據,不會改變系統數據,例如各種前端的展示頁面使用的接口。Vo是接口返回結果的對象化封裝。
命名規范:
對象 | 規范 | 示例 |
---|---|---|
Command | 方法名+Command | AddUserCommand, UpdateUserCommand |
Query | 方法名+Query | ListUserQuery, PageListUserQuery,FindByNameUserQuery |
Vo | 方法名+Vo | ListUserVo, PageLIstUserVo, FindByNameUserVo |
Service層:
Service層是服務層,主要負責系統業務邏輯的部分。Service層對象不分出參和入參,統一命名為Dto。注意,Service層對象除了Dto還可以包含基礎的封裝對象例如:Integer, String等基礎類型。
Domain層:
Service層是領域服務層,主要包含與數據庫一一對應的Entity對象。
轉換
層與層之間的對象不能跨層使用,必須進行對象拷貝轉換。
總結如下表:
層次 | 入參對象 | 返回對象 |
---|---|---|
Controller層 | xxxCommand/xxxQuery | xxxVo |
Service層 | xxxDto /基礎包裝類 | xxxDto /基礎包裝類 |
Domain層 | xxxEntity | xxxEntity |
注意
Dto,Command,Query,Vo命名規范只對最外層的總包對象做命名規范要求。里層包裹的復用對象不做規范要求,建議復用對象都叫Pojo結尾即可。
分包規范
Command/Query/Vo
Command/Query/Vo 分別放在api或者controller包下的Command子包,Query子包和Vo子包。如下圖所示:
Dto
Dto 放在Service包下的dto子包中,如下圖所示
Entity
Entity放在domain.entity包下,如下圖所示
對象繼承規范
公共基礎庫基礎對象繼承關系
跨類型字段復用方案
Controller層與Service層對象復用字段的公共類放在common項目中,如下圖所示
對象轉換
對象轉化統一使用base-common庫中的ConvertUtil類進行轉換。轉換使用淺拷貝的方式避免帶來性能損耗。
對象轉對象
如下圖示例
對象列表轉對象列表
如下圖示例
綜合樣本代碼
綜合使用可以參考模版工程中的User的增刪改查例子