引言
良好的命名规范是软件工程的基石。它不仅能提升代码的可读性,还能降低团队协作的沟通成本,使项目在长期迭代中更易于维护。本规范结合了业界主流实践(如阿里巴巴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。
参考现有代码: 在加入一个新项目时,花时间阅读已有的代码,了解并遵循项目既有的命名规范。