引言
良好的命名規范是軟件工程的基石。它不僅能提升代碼的可讀性,還能降低團隊協作的溝通成本,使項目在長期迭代中更易于維護。本規范結合了業界主流實踐(如阿里巴巴Java開發手冊)以及現代Web應用分層架構的特點,旨在提供一套清晰、一致的命名指導。
一、 核心分層命名規范
后端應用通常采用分層架構,每一層都有其特定的職責和命名后綴。
1、Controller (控制層)
- 后綴:?Controller
- 職責: 接收并處理前端HTTP請求,對請求參數進行基礎校驗,調用Service層處理業務,并最終向前端返回響應數據(通常是?AjaxResult?或?ResponseEntity)。
- 示例:?UserController,?OrderController,?HotProductController
2、Service (服務層)
職責: 編排和實現核心業務邏輯。它是業務功能的載體,處理復雜的業務規則、事務管理等。
接口:
- 前綴:?I?(Interface)
- 后綴:?Service
- 示例:?IUserService,?IOrderService,?IHotProductService
實現類:
- 后綴:?ServiceImpl
- 示例:?UserServiceImpl,?OrderServiceImpl,?HotProductServiceImpl
3、Mapper / Repository / DAO (數據訪問層)
職責: 直接與數據庫進行交互,執行SQL語句,完成數據的增、刪、改、查(CRUD)操作
MyBatis :
- 后綴:?Mapper
- 示例:?UserMapper,?OrderMapper
JPA:
- 后綴:?Repository
- 示例:?UserRepository,?OrderRepository
二、 數據對象 (Domain?/ POJO) 命名規范
數據對象是應用中信息流轉的載體,根據其用途的不同,可以細分為多種類型。
1、Entity / DO (Domain Object - 領域對象/實體類)
- 命名: 直接使用業務名詞的駝峰式命名,無任何后綴。
- 職責: 與數據庫中的表結構一一對應,是數據的持久化模型。一個Entity實例代表了表中的一條記錄。
- 示例:?User,?Order,?Product?(若依框架中常帶有Sys前綴,如?SysUser,?SysRole)
2、DTO (Data Transfer Object - 數據傳輸對象)
- 后綴:?Dto?(推薦,首字母小寫),而非?DTO。這是為了遵循Java的駝峰命名法,保持風格統一。
- 職責: 在不同服務層、模塊或應用之間傳遞數據。它是一個純粹的數據載體,不應包含業務邏輯。通常用于Service層返回給Controller層,或作為通用API的響應體。
- 示例:?UserDto,?ProductDto,?HotProductDto
3、VO (View Object - 視圖對象)
- 后綴:?Vo
- 職責: 專門用于封裝前端界面需要展示的數據。它完全根據UI的需求來定義,可能來自多個Entity或DTO的組合。
- 說明: 在簡單的項目中,DTO和VO的職責可能會合并,統一使用DTO。但在復雜的前端界面,定義專門的VO會讓結構更清晰。
- 示例:?UserLoginVo,?DashboardStatisticsVo
4、Query / Param (查詢參數對象)
- 后綴:?Query?或?Param
- 職責: 用于封裝來自前端的GET請求的查詢條件。將多個查詢參數封裝成一個對象,可以使Controller的方法簽名更整潔。
- 示例:?UserQuery,?OrderQuery,?HotProductQuery
5、Request / Form (請求體對象)
- 后綴:?Request?或?Form
- 職責: 用于封裝POST、PUT等請求的請求體(Request Body)。
- 示例:?CreateUserRequest,?UpdateProductForm,?LoginForm
6、Response (特定響應對象)
- 后綴:?Response
- 職責: 用于封裝特定接口的響應數據。當一個接口的返回結構非常獨特,不適合使用通用的DTO時,應為其定義專門的Response類。這能讓接口的輸入輸出(XxxRequest/XxxResponse)形成清晰的對應關系。
- 示例:?BatchDeleteUserResponse?(返回批量刪除的成功和失敗詳情),?FileUploadResponse
三、 其他常見類命名規范
1、配置類:
- 后綴:?Config
- 示例:?MyBatisConfig,?SecurityConfig
2、自定義異常類:
- 后綴:?Exception
- 示例:?UserNotFoundException,?PermissionDeniedException
3、工具類:
- 后綴:?Utils?或?Util
- 示例:?StringUtils,?DateUtils,?JwtUtil
4、枚舉類:
- 后綴:?Enum?(可選,但推薦)
- 示例:?OrderStatusEnum,?UserTypeEnum
5、過濾器/攔截器:
- 后綴:?Filter?或?Interceptor
- 示例:?JwtAuthenticationTokenFilter,?RepeatableFilter
6、監聽器/處理器:
- 后綴:?Listener?或?Handler
- 示例:?OrderCreatedListener,?GlobalExceptionHandler
7、測試類:
- 后綴:?Test?或?Tests
- 示例:?UserServiceTest,?UserControllerTests
四、 總結與最佳實踐
一致性是首要原則: 在一個項目中,務必遵循同一種命名風格。
見名知意: 類名應清晰地反映其職責,避免使用模棱兩可或過于簡寫的詞語。例如?CreateUserRequest?遠勝于?CrtUsrReq。
遵循Java駝峰命名法: 類名使用大駝峰(PascalCase),例如?HotProductController。對于縮寫詞,將其視為一個普通單詞處理,例如?Dto、Vo、Url,而非?DTO、VO、URL。
參考現有代碼: 在加入一個新項目時,花時間閱讀已有的代碼,了解并遵循項目既有的命名規范。