Skip to main content

personal-backend-coding-standard

后端编码规范技能,提供后端开发的编码标准和最佳实践指导

Datos de origen

Repositorio
bage2014/study
Última actividad en el origen
24 de junio de 2026 a las 23:18
Idioma detectado de SKILL.md
chino
Estrellas
646
Forks
113

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
personal-backend-coding-standard
description
后端编码规范技能,提供后端开发的编码标准和最佳实践指导
trigger
编写后端代码时需要遵循编码规范
disable-when
团队已有明确的编码规范
category
personal
tags
["coding","standard","backend","java"]
# 后端编码规范技能 ## 功能描述 提供后端开发的编码标准和最佳实践指导,帮助开发者编写高质量、可维护的后端代码。 ## 何时使用 在以下情况调用此技能: - 需要编写后端代码时 - 需要审查后端代码质量时 - 需要学习后端编码规范时 - 需要培训团队成员时 ## 核心功能 - **命名规范**:提供变量、方法、类的命名标准 - **代码结构**:指导代码组织和文件结构 - **错误处理**:规范异常处理和错误返回 - **数据库操作**:提供数据库访问的最佳实践 - **API设计**:指导 RESTful API 的设计规范 - **安全规范**:提供安全编码的最佳实践 ## 输入参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | language | String | 否 | 目标语言(Java/Python/Go等),默认Java | | framework | String | 否 | 使用的框架(Spring Boot/Django/Gin等) | | focusArea | String | 否 | 关注领域(naming/structure/error/db/api/security) | ## 输出格式 ```json { "status": "SUCCESS", "language": "Java", "framework": "Spring Boot", "focusArea": "naming", "rules": [ { "category": "命名规范", "rules": [ { "rule": "类名使用 PascalCase", "example": "class UserService", "description": "类名应采用大驼峰命名法" } ] } ], "bestPractices": ["最佳实践1", "最佳实践2"] } ``` ## 项目技术栈 | 技术 | 版本 | 说明 | |------|------|------| | JDK | 21 | 项目默认使用 JDK 21 | | Spring Boot | 3.x | 项目默认使用 Spring Boot 3.x | | 日志框架 | SLF4J + Logback | 使用 Lombok @Slf4j 注解 | ## 项目模块结构 ``` xx-parent/ ├── xx-gateway/ # 网关模块 - 处理请求路由和认证 ├── xx-biz/ # 业务模块 - 核心业务逻辑 └── xx-infra/ # 基础设施模块 - 公共组件、工具类 ``` ## 编码规范分类 ### 1. 命名规范 | 元素类型 | 规范 | 示例 | |----------|------|------| | 类名 | PascalCase | `UserService`, `OrderRepository` | | 方法名 | camelCase | `createUser()`, `getOrderById()` | | 变量名 | camelCase | `userName`, `orderId` | | 常量名 | UPPER_SNAKE_CASE | `MAX_RETRY_COUNT`, `DEFAULT_TIMEOUT` | | 包名 | lowercase | `com.bage.xx.service`, `com.bage.xx.repository` | | 接口名 | PascalCase + 以 Interface 结尾或直接命名 | `UserRepository`, `UserService` | | 模块名 | kebab-case | `xx-gateway`, `xx-biz`, `xx-infra` | ### 2. 代码结构 ``` src/main/java/com/bage/xx/ ├── controller/ # REST API 控制层 │ └── UserController.java ├── service/ # 业务逻辑层 │ ├── UserService.java │ └── impl/ │ └── UserServiceImpl.java ├── repository/ # 数据访问层 │ └── UserRepository.java ├── entity/ # 数据库实体 │ └── User.java ├── dto/ # 数据传输对象 │ ├── request/ │ │ └── UserCreateRequest.java │ └── response/ │ └── UserResponse.java ├── config/ # 配置类 │ └── WebConfig.java ├── exception/ # 自定义异常 │ ├── BusinessException.java │ └── GlobalExceptionHandler.java ├── util/ # 工具类 │ └── StringUtils.java └── Application.java # 启动类 ``` ### 3. 方法设计 | 原则 | 说明 | |------|------| | 单一职责 | 每个方法只做一件事 | | 方法长度 | 尽量控制在 50 行以内 | | 参数数量 | 尽量控制在 3-5 个以内 | | 返回值 | 避免返回 null,使用 Optional | | 异常处理 | 使用 try-with-resources | ### 4. 日志规范 **统一使用 Lombok @Slf4j 注解** ```java import lombok.extern.slf4j.Slf4j; @Slf4j @Service public class UserServiceImpl implements UserService { @Override public UserResponse createUser(UserCreateRequest request) { log.info("开始创建用户,邮箱: {}", request.getEmail()); try { // 业务逻辑 log.debug("用户创建成功,ID: {}", userId); return response; } catch (Exception e) { log.error("创建用户失败,邮箱: {}", request.getEmail(), e); throw e; } } } ``` ### 5. 错误处理 ```java // 自定义异常 public class BusinessException extends RuntimeException { private final String errorCode; public BusinessException(String errorCode, String message) { super(message); this.errorCode = errorCode; } } // 全局异常处理 @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException e) { return ResponseEntity.badRequest() .body(new ErrorResponse(e.getErrorCode(), e.getMessage())); } @ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleException(Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("INTERNAL_ERROR", "系统内部错误")); } } ``` ### 6. 数据库操作 | 原则 | 说明 | |------|------| | 使用 ORM | 使用 Spring Data JPA 或 MyBatis | | 事务管理 | 使用 `@Transactional` 注解 | | 查询优化 | 使用索引,避免 N+1 查询 | | 批量操作 | 使用批量插入/更新 | | SQL 注入 | 使用参数化查询 | ### 7. API 设计 **HTTP 方法限制**:Controller 只暴露 GET 和 POST 请求,不使用 PUT、PATCH、DELETE 等其他方法 | 原则 | 说明 | |------|------| | RESTful | 遵循 REST 原则 | | 路径命名 | 使用小写连字符 | | HTTP 方法 | **仅使用 GET 和 POST** | | 状态码 | 使用标准 HTTP 状态码 | | 响应格式 | 统一响应结构 | **Controller 示例**: ```java @RestController @RequestMapping("/api/users") public class UserController { @Autowired private UserService userService; // 查询 - 使用 GET @GetMapping("/{id}") public ResponseEntity<UserResponse> getUserById(@PathVariable String id) { return ResponseEntity.ok(userService.getUserById(id)); } // 列表查询 - 使用 GET @GetMapping public ResponseEntity<List<UserResponse>> listUsers() { return ResponseEntity.ok(userService.listUsers()); } // 创建 - 使用 POST @PostMapping public ResponseEntity<UserResponse> createUser(@RequestBody UserCreateRequest request) { return ResponseEntity.status(HttpStatus.CREATED) .body(userService.createUser(request)); } // 更新 - 使用 POST(不使用 PUT/PATCH) @PostMapping("/{id}/update") public ResponseEntity<UserResponse> updateUser( @PathVariable String id, @RequestBody UserUpdateRequest request) { return ResponseEntity.ok(userService.updateUser(id, request)); } // 删除 - 使用 POST(不使用 DELETE) @PostMapping("/{id}/delete") public ResponseEntity<Void> deleteUser(@PathVariable String id) { userService.deleteUser(id); return ResponseEntity.noContent().build(); } } ``` ### 8. 安全规范 | 原则 | 说明 | |------|------| | 输入验证 | 使用 `@Valid` 和 `@Validated` | | 认证授权 | 使用 Spring Security | | 密码加密 | 使用 BCrypt 或 Argon2 | | SQL 注入 | 使用参数化查询 | | XSS 防护 | 对输出进行转义 | | CSRF 防护 | 启用 CSRF 保护 | ## 最佳实践指南 ### Java 后端开发最佳实践 1. **使用 Lombok**:简化样板代码,使用 @Slf4j、@Data、@Builder 等注解 2. **使用 DTO**:分离实体和传输对象 3. **使用 Optional**:避免空指针异常 4. **使用 Stream API**:简化集合操作 5. **使用断言**:验证方法参数 6. **编写单元测试**:保证代码质量 7. **使用日志框架**:使用 @Slf4j 注解(SLF4J + Logback) 8. **配置外部化**:使用配置文件或环境变量 ### Spring Boot 最佳实践 ```java @Slf4j @Service public class UserServiceImpl implements UserService { private final UserRepository userRepository; public UserServiceImpl(UserRepository userRepository) { this.userRepository = userRepository; } @Override @Transactional public UserResponse createUser(UserCreateRequest request) { log.info("创建用户请求: {}", request.getEmail()); validateRequest(request); User user = User.builder() .email(request.getEmail()) .name(request.getName()) .build(); User savedUser = userRepository.save(user); log.debug("用户创建成功,ID: {}", savedUser.getId()); return UserResponse.fromEntity(savedUser); } private void validateRequest(UserCreateRequest request) { if (request.getEmail() == null || request.getEmail().isEmpty()) { throw new BusinessException("INVALID_PARAM", "邮箱不能为空"); } } } ``` ## 代码审查检查清单 | 检查项 | 说明 | 状态 | |--------|------|------| | 命名规范 | 变量、方法、类命名是否符合规范 | ✅/❌ | | 代码格式 | 缩进、空格、换行是否符合规范 | ✅/❌ | | 注释完整 | 是否有必要的注释说明 | ✅/❌ | | 异常处理 | 是否正确处理异常情况 | ✅/❌ | | 代码复用 | 是否避免重复代码 | ✅/❌ | | 性能优化 | 是否考虑性能问题 | ✅/❌ | | 安全性 | 是否存在安全隐患 | ✅/❌ | | 可测试性 | 代码是否易于测试 | ✅/❌ | | 日志使用 | 是否正确使用 @Slf4j 注解 | ✅/❌ | | HTTP 方法 | 是否仅使用 GET 和 POST | ✅/❌ | ## 核心组件 | 组件 | 职责 | 描述 | |------|------|------| | CodeStyleChecker | 代码风格检查器 | 检查代码是否符合命名规范 | | CodeStructureAnalyzer | 代码结构分析器 | 分析代码组织和文件结构 | | SecurityScanner | 安全扫描器 | 检测安全隐患 | | BestPracticeRecommender | 最佳实践推荐器 | 提供最佳实践建议 | ## 配置要求 ### 环境变量 | 变量名 | 说明 | 默认值 | |--------|------|--------| | JAVA_HOME | JDK 21 路径 | - | ### Maven 依赖 ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> </parent> <properties> <java.version>21</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> ``` ## 扩展指南 ### 添加新的编码规则 1. 在规则引擎中添加新规则 2. 定义规则的检查逻辑 3. 更新代码审查检查清单 ### 添加新语言支持 1. 创建对应语言的规则定义 2. 添加语言特定的最佳实践 3. 更新技能文档 ## 触发条件
Ver en GitHub