Files
makemd/docs/09_Development_Guide.md
2026-03-30 16:55:04 +08:00

341 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 开发指南
## 1. 开发环境搭建
### 1.1 环境要求
- **Java**: JDK 17 或更高版本
- **Maven**: 3.6 或更高版本
- **MySQL**: 8.0 或更高版本
- **Redis**: 6.0 或更高版本
- **IDE**: IntelliJ IDEA 或 Eclipse
### 1.2 安装步骤
**Windows 系统**:
1. 下载并安装 JDK 17[Oracle JDK 17](https://www.oracle.com/java/technologies/downloads/#java17)
2. 下载并安装 Maven[Apache Maven](https://maven.apache.org/download.cgi)
3. 下载并安装 MySQL[MySQL Community Server](https://dev.mysql.com/downloads/mysql/)
4. 下载并安装 Redis[Redis for Windows](https://github.com/tporadowski/redis/releases)
5. 下载并安装 IntelliJ IDEA[IntelliJ IDEA](https://www.jetbrains.com/idea/download/)
**Linux 系统**:
1. 安装 JDK 17
```bash
sudo yum install java-17-openjdk-devel
```
2. 安装 Maven
```bash
sudo yum install maven
```
3. 安装 MySQL
```bash
sudo yum install mysql-server
```
4. 安装 Redis
```bash
sudo yum install redis
```
5. 安装 IntelliJ IDEA
```bash
sudo snap install intellij-idea-community --classic
```
### 1.3 项目导入
**IntelliJ IDEA**:
1. 打开 IntelliJ IDEA
2. 点击「File」→「Open」
3. 选择项目目录 `d:\trae_projects\makemd\makemd\serverjava`
4. 点击「OK」等待项目导入完成
5. 点击「File」→「Project Structure」→「Project」设置 JDK 为 17
6. 点击「File」→「Project Structure」→「Modules」确保 Maven 依赖正确导入
**Eclipse**:
1. 打开 Eclipse
2. 点击「File」→「Import」→「Maven」→「Existing Maven Projects」
3. 选择项目目录 `d:\trae_projects\makemd\makemd\serverjava`
4. 点击「Finish」等待项目导入完成
5. 右键点击项目选择「Properties」→「Java Build Path」→「Libraries」确保 JDK 为 17
## 2. 代码规范
### 2.1 命名规范
**类命名**
- 使用驼峰命名法,首字母大写
- 类名应该清晰描述类的功能
- 服务类使用 `Service` 后缀
- 控制器类使用 `Controller` 后缀
- 配置类使用 `Config` 后缀
**方法命名**
- 使用驼峰命名法,首字母小写
- 方法名应该清晰描述方法的功能
- 动词开头,如 `createUser`, `updateProduct`
**变量命名**
- 使用驼峰命名法,首字母小写
- 变量名应该清晰描述变量的用途
- 避免使用缩写,如 `usr` 应该改为 `user`
**常量命名**
- 使用全大写,单词之间用下划线分隔
- 常量名应该清晰描述常量的用途
### 2.2 代码风格
**缩进**
- 使用 4 个空格进行缩进
- 避免使用制表符
**换行**
- 每行代码长度不超过 120 个字符
- 适当换行,提高代码可读性
**注释**
- 为类、方法、变量添加适当的注释
- 使用 Javadoc 注释格式
- 注释应该清晰描述代码的功能和用途
**示例**
```java
/**
* 用户服务类,提供用户相关的业务逻辑
*/
@Service
public class UserService {
/**
* 创建用户
* @param user 用户信息
* @return 创建的用户
*/
public User createUser(User user) {
// 实现创建用户的逻辑
return userRepository.save(user);
}
}
```
### 2.3 代码质量
**代码检查**
- 使用 ESLint 检查代码质量
- 使用 SonarQube 分析代码质量
- 定期进行代码审查
**测试覆盖**
- 为代码添加单元测试和集成测试
- 确保测试覆盖率达到 80% 以上
**性能优化**
- 优化代码逻辑,提高性能
- 避免不必要的计算和操作
- 使用缓存减少数据库查询
## 3. 开发流程
### 3.1 分支管理
**分支策略**
- `main`:主分支,用于发布生产版本
- `develop`:开发分支,用于集成开发
- `feature`:特性分支,用于开发新功能
- `hotfix`:热修复分支,用于修复生产环境的 bug
**分支命名**
- 特性分支:`feature/feature-name`
- 热修复分支:`hotfix/bug-description`
**分支操作**
1. 从 `develop` 分支创建特性分支
2. 在特性分支上开发新功能
3. 提交代码并推送特性分支
4. 创建 Pull Request 到 `develop` 分支
5. 代码审查通过后,合并到 `develop` 分支
6. 从 `main` 分支创建热修复分支
7. 在热修复分支上修复 bug
8. 提交代码并推送热修复分支
9. 创建 Pull Request 到 `main` 和 `develop` 分支
10. 代码审查通过后,合并到 `main` 和 `develop` 分支
### 3.2 代码提交
**提交规范**
- 提交消息应该清晰描述提交的内容
- 使用以下格式:`[模块] 描述`
- 例如:`[User] 修复用户注册功能`
**提交频率**
- 每次提交应该只包含一个功能或 bug 修复
- 避免一次提交多个不相关的更改
- 定期提交代码,避免代码丢失
### 3.3 代码审查
**审查流程**
1. 开发人员创建 Pull Request
2. 团队成员审查代码
3. 审查通过后,合并代码
4. 审查不通过时,开发人员修改代码并重新提交
**审查重点**
- 代码质量和风格
- 功能实现是否正确
- 测试覆盖是否充分
- 性能是否优化
- 安全性是否考虑
## 4. 开发工具
### 4.1 IDE 插件
**IntelliJ IDEA 插件**
- **Lombok**:简化 Java 代码
- **Spring Boot Assistant**Spring Boot 开发辅助
- **MyBatis Plugin**MyBatis 开发辅助
- **SonarLint**:代码质量检查
- **CheckStyle**:代码风格检查
**Eclipse 插件**
- **Lombok**:简化 Java 代码
- **Spring Tools Suite**Spring Boot 开发辅助
- **MyBatis Generator**MyBatis 开发辅助
- **SonarLint**:代码质量检查
- **CheckStyle**:代码风格检查
### 4.2 构建工具
**Maven**
- 用于项目构建和依赖管理
- 配置文件:`pom.xml`
- 常用命令:
```bash
# 编译项目
mvn compile
# 运行测试
mvn test
# 构建项目
mvn clean package
# 运行项目
mvn spring-boot:run
```
### 4.3 版本控制
**Git**
- 用于版本控制
- 配置文件:`.gitignore`
- 常用命令:
```bash
# 克隆仓库
git clone <repository-url>
# 查看状态
git status
# 添加文件
git add .
# 提交代码
git commit -m "[模块] 描述"
# 推送代码
git push
# 拉取代码
git pull
```
## 5. 开发最佳实践
### 5.1 代码组织
**目录结构**
- 遵循 Spring Boot 标准目录结构
- 按功能模块组织代码
- 保持代码结构清晰
**示例目录结构**
```
serverjava/
├── src/
│ ├── main/
│ │ ├── java/com/crawlful/hub/
│ │ │ ├── api/controllers/ # 控制器
│ │ │ ├── service/ # 服务
│ │ │ ├── model/ # 模型
│ │ │ ├── config/ # 配置
│ │ │ ├── util/ # 工具类
│ │ │ ├── security/ # 安全
│ │ │ └── monitoring/ # 监控
│ │ └── resources/ # 资源文件
│ │ ├── i18n/ # 国际化资源
│ │ ├── db/migration/ # 数据库迁移脚本
│ │ ├── application.yml # 应用配置
│ │ └── logback.xml # 日志配置
│ └── test/ # 测试代码
├── pom.xml # Maven 配置
└── docs/ # 文档
```
### 5.2 依赖管理
**依赖版本**
- 使用 Spring Boot 3.2.0 版本
- 统一管理依赖版本
- 定期更新依赖,修复安全漏洞
**依赖范围**
- `compile`:编译和运行时依赖
- `test`:测试依赖
- `provided`:编译时依赖,运行时由容器提供
### 5.3 错误处理
**全局异常处理**
- 实现 `GlobalExceptionHandler` 类
- 统一处理系统异常
- 返回统一的错误格式
**自定义异常**
- 定义业务异常类
- 提供错误码和错误消息
- 便于异常处理和日志记录
### 5.4 日志管理
**日志级别**
- `DEBUG`:开发调试,详细执行路径
- `INFO`:正常业务流程,如订单创建、状态流转
- `WARN`:潜在问题,如重试、熔断触发
- `ERROR`:错误异常,如 API 调用失败、数据库异常
**日志格式**
- 包含时间戳、日志级别、类名、消息等
- 使用 Logback 配置日志格式
### 5.5 测试策略
**单元测试**
- 测试单个方法或类
- 使用 JUnit 5 和 Mockito
- 测试边界条件和异常情况
**集成测试**
- 测试组件之间的交互
- 使用 Spring Test
- 测试完整的业务流程
**系统测试**
- 测试整个系统的功能
- 使用 Postman 测试 API 接口
- 测试用户场景
## 6. 总结
本开发指南详细介绍了 Crawlful Hub 项目的开发环境搭建、代码规范和开发流程。通过本指南,您可以了解如何快速上手项目开发,确保代码质量和开发效率。