Skip to content

计划模式 (Plan Mode)

MyDeskBot 的计划模式帮助您将复杂的开发任务分解为可执行的小步骤,提高任务完成的质量和效率。

目录

什么是计划模式

计划模式是 MyDeskBot 的高级功能,专门用于处理复杂的开发任务。它会:

  • 📋 分析任务需求 - 理解任务的目标和范围
  • 🔍 识别依赖关系 - 找出任务间的依赖和顺序
  • 📊 生成详细计划 - 创建可执行的步骤清单
  • ⏱️ 估算工作量 - 提供时间估算
  • 🎯 分步执行 - 引导您一步步完成任务

如何使用

IntelliJ IDEA

  1. 打开计划模式:ToolsMyDeskBotPlan Mode
  2. 或使用快捷键:Ctrl+Shift+P (Windows/Linux) / Cmd+Shift+P (macOS)
  3. 描述您的任务
  4. AI 生成详细计划
  5. 逐步执行每个步骤

VS Code

  1. 命令面板:MyDeskBot: Plan Mode
  2. 快捷键:Ctrl+Shift+P
  3. 描述任务并生成计划

Neovim

vim
:MyDeskBotPlan

计划类型

1. 功能开发计划

任务描述:

实现一个用户认证系统,包括:
- 用户注册和登录
- JWT token 认证
- 密码重置功能
- 邮箱验证
- 权限管理

生成的计划:

markdown
# 用户认证系统开发计划

## 阶段一:设计阶段(预计 4 小时)

### 1.1 数据库设计(1 小时)

- [ ] 设计用户表结构
  - id, email, username, password_hash
  - email_verified, email_verified_at
  - reset_password_token, reset_password_expires
  - created_at, updated_at
- [ ] 设计权限表结构

  - roles 表
  - permissions 表
  - role_permissions 关联表

- [ ] 编写数据库迁移脚本

### 1.2 API 设计(1.5 小时)

- [ ] 定义认证端点

  - POST /api/auth/register
  - POST /api/auth/login
  - POST /api/auth/logout
  - POST /api/auth/refresh-token
  - POST /api/auth/forgot-password
  - POST /api/auth/reset-password
  - POST /api/auth/verify-email

- [ ] 定义用户管理端点

  - GET /api/users/me
  - PUT /api/users/me
  - GET /api/users/:id
  - PUT /api/users/:id

- [ ] 定义权限管理端点
  - GET /api/roles
  - POST /api/roles
  - PUT /api/roles/:id
  - DELETE /api/roles/:id

### 1.3 安全设计(1.5 小时)

- [ ] JWT 策略配置
  - Access token: 15 分钟
  - Refresh token: 7 天
  - 签名算法: RS256
- [ ] 密码策略
  - 最小长度: 8 字符
  - 必须包含大小写字母、数字
  - 使用 bcrypt 加密
- [ ] 防护措施
  - 限流(rate limiting)
  - 防止暴力破解
  - HTTPS 强制

## 阶段二:后端开发(预计 12 小时)

### 2.1 基础设施(2 小时)

- [ ] 安装依赖包
  - jsonwebtoken
  - bcrypt
  - nodemailer
- [ ] 配置环境变量
  - JWT_SECRET, JWT_REFRESH_SECRET
  - SMTP 配置
  - 数据库连接
- [ ] 创建数据库连接模块

### 2.2 数据库实现(2 小时)

- [ ] 运行迁移脚本
- [ ] 创建 User 模型
- [ ] 创建 Role 和 Permission 模型
- [ ] 编写基础 Repository

### 2.3 认证服务(4 小时)

- [ ] 实现注册功能
  - 验证邮箱格式
  - 检查邮箱是否已存在
  - 哈希密码
  - 发送验证邮件
- [ ] 实现登录功能
  - 验证用户凭证
  - 生成 JWT tokens
  - 返回用户信息
- [ ] 实现 token 刷新功能
  - 验证 refresh token
  - 生成新的 access token
- [ ] 实现密码重置功能
  - 生成重置 token
  - 发送重置邮件
  - 验证 token
  - 更新密码

### 2.4 用户服务(2 小时)

- [ ] 实现获取当前用户信息
- [ ] 实现更新用户信息
- [ ] 实现用户查询
- [ ] 实现角色检查

### 2.5 权限服务(2 小时)

- [ ] 实现角色 CRUD
- [ ] 实现权限分配
- [ ] 实现权限检查中间件
- [ ] 实现装饰器/注解

## 阶段三:前端开发(预计 10 小时)

### 3.1 UI 组件(3 小时)

- [ ] 创建登录表单组件
  - 邮箱输入
  - 密码输入
  - 记住我选项
  - 错误提示
- [ ] 创建注册表单组件
  - 邮箱、用户名、密码输入
  - 密码强度指示器
  - 密码确认
- [ ] 创建忘记密码表单
- [ ] 创建重置密码表单

### 3.2 状态管理(2 小时)

- [ ] 设计认证状态
  - isAuthenticated
  - user
  - tokens
  - permissions
- [ ] 实现 Auth Store
  - login action
  - logout action
  - register action
  - refresh token action

### 3.3 API 集成(2 小时)

- [ ] 创建认证 API 客户端
- [ ] 实现请求拦截器
  - 自动添加 Authorization header
  - 自动刷新 token
- [ ] 实现响应拦截器
  - 处理 401 未授权
  - 自动登出

### 3.4 路由守卫(2 小时)

- [ ] 实现公共路由
- [ ] 实现受保护路由
- [ ] 实现基于权限的路由守卫
- [ ] 处理重定向

### 3.5 页面集成(1 小时)

- [ ] 集成登录页面
- [ ] 集成注册页面
- [ ] 集成密码重置流程
- [ ] 集成用户信息页面

## 阶段四:测试(预计 8 小时)

### 4.1 单元测试(4 小时)

- [ ] 测试认证服务
  - 注册测试
  - 登录测试
  - token 验证测试
  - 密码重置测试
- [ ] 测试用户服务
- [ ] 测试权限服务
- [ ] 测试中间件

### 4.2 集成测试(2 小时)

- [ ] 测试认证流程
- [ ] 测试权限控制
- [ ] 测试 token 刷新

### 4.3 端到端测试(2 小时)

- [ ] 测试用户注册流程
- [ ] 测试登录流程
- [ ] 测试密码重置流程
- [ ] 测试权限控制

## 阶段五:部署(预计 2 小时)

### 5.1 部署准备(1 小时)

- [ ] 配置生产环境变量
- [ ] 准备 Docker 镜像
- [ ] 配置数据库

### 5.2 部署上线(1 小时)

- [ ] 部署后端服务
- [ ] 部署前端应用
- [ ] 配置域名和 SSL
- [ ] 验证功能

## 总计

- 预计总时间:36 小时
- 建议分配:4.5 个工作日
- 团队规模:2-3 人

## 依赖关系

阶段一(设计) ↓ 阶段二(后端) ↓ 阶段三(前端)←→ 阶段四(测试) ↓ 阶段五(部署)


## 风险和注意事项

- [ ] 邮件服务需要提前配置
- [ ] 生产环境需要 HTTPS
- [ ] 考虑使用现成的认证库(如 Passport.js)
- [ ] 注意 GDPR 和隐私合规

2. 代码重构计划

任务描述:

重构用户服务代码,提高可维护性和可测试性。
当前代码存在以下问题:
- 函数过长(超过 100 行)
- 职责不清晰
- 难以测试
- 缺少错误处理

生成的计划:

markdown
# 用户服务重构计划

## 分析阶段(1 小时)

### 1.1 代码分析

- [ ] 分析当前 UserService 代码
- [ ] 识别职责(使用单一职责原则)
- [ ] 测量圈复杂度
- [ ] 识别代码重复

### 1.2 依赖分析

- [ ] 绘制依赖关系图
- [ ] 识别紧密耦合
- [ ] 找出可以提取的依赖

## 设计阶段(2 小时)

### 2.1 职责划分

- [ ] 定义新的模块结构
  - UserRepository(数据访问)
  - UserValidator(验证逻辑)
  - UserMapper(数据转换)
  - EmailService(邮件发送)
  - PasswordService(密码处理)

### 2.2 接口设计

- [ ] 设计各模块接口
- [ ] 定义清晰的契约

## 实施阶段(6 小时)

### 3.1 提取验证逻辑(1.5 小时)

- [ ] 创建 UserValidator 类
  - validateEmail()
  - validatePassword()
  - validateUserData()
- [ ] 编写单元测试
- [ ] 迁移验证逻辑

### 3.2 提取密码处理(1 小时)

- [ ] 创建 PasswordService
  - hash()
  - verify()
  - generateResetToken()
- [ ] 编写单元测试
- [ ] 迁移密码逻辑

### 3.3 提取邮件服务(1 小时)

- [ ] 创建 EmailService
  - sendVerificationEmail()
  - sendPasswordResetEmail()
- [ ] 编写单元测试
- [ ] 迁移邮件逻辑

### 3.4 简化 UserService(1.5 小时)

- [ ] 重构 UserService 使用新服务
- [ ] 减少方法长度
- [ ] 提高可读性

### 3.5 添加错误处理(1 小时)

- [ ] 定义自定义异常
  - UserNotFoundException
  - InvalidPasswordException
  - EmailAlreadyExistsException
- [ ] 添加异常处理
- [ ] 编写异常测试

## 测试阶段(3 小时)

### 4.1 单元测试

- [ ] 为每个模块编写测试
- [ ] 达到 90% 覆盖率

### 4.2 集成测试

- [ ] 测试服务间协作
- [ ] 测试端到端流程

### 4.3 回归测试

- [ ] 确保原有功能正常
- [ ] 对比重构前后行为

## 文档阶段(1 小时)

### 5.1 更新文档

- [ ] 更新 API 文档
- [ ] 添加架构说明
- [ ] 编写使用示例

## 总计

- 预计时间:13 小时
- 建议分配:1.5 个工作日

## 风险

- 可能引入新 bug
- 需要充分测试
- 考虑使用特性开关逐步发布

3. 调试计划

任务描述:

生产环境报错:用户注册时偶尔会超时。
错误日志显示数据库连接池耗尽。

生成的计划:

markdown
# 数据库连接池耗尽问题调试计划

## 紧急缓解(30 分钟)

### 1.1 立即措施

- [ ] 检查当前连接池配置
- [ ] 临时增加连接池大小
- [ ] 监控连接使用情况
- [ ] 设置告警

## 根本原因分析(2 小时)

### 2.1 数据库层面

- [ ] 检查数据库连接数
  ```sql
  SELECT count(*) FROM pg_stat_activity;
  ```
  • [ ] 检查慢查询
    sql
    SELECT query, mean_exec_time
    FROM pg_stat_statements
    ORDER BY mean_exec_time DESC
    LIMIT 10;
  • [ ] 检查锁等待
    sql
    SELECT * FROM pg_locks
    WHERE NOT granted;

2.2 应用层面

  • [ ] 检查连接池配置
    • 最大连接数
    • 空闲超时
    • 连接泄漏
  • [ ] 添加连接池监控
    • 记录连接创建/释放
    • 记录连接等待时间
  • [ ] 分析用户注册代码
    • 检查是否有事务未关闭
    • 检查是否有连接未释放

2.3 负载层面

  • [ ] 分析请求量
    • 注册请求频率
    • 峰值时间
  • [ ] 检查是否有异常流量
    • 恶意注册
    • 批量操作

解决方案(4 小时)

3.1 短期解决方案(1.5 小时)

  • [ ] 优化连接池配置
    javascript
    pool: {
      max: 20,           // 增加最大连接数
      min: 5,            // 保持最小连接
      idle: 30000,       // 空闲超时 30 秒
      acquire: 60000,    // 获取超时 60 秒
    }
  • [ ] 添加连接释放保证
    javascript
    // 使用 finally 确保连接释放
    try {
      // 执行操作
    } finally {
      await connection.release();
    }
  • [ ] 添加注册限流
    javascript
    // 限制单个 IP 每分钟最多注册 5 次
    rateLimit({
      windowMs: 60 * 1000,
      max: 5,
    });

3.2 长期解决方案(2.5 小时)

  • [ ] 实现连接池监控告警
  • [ ] 优化数据库查询
  • [ ] 实现读写分离
  • [ ] 考虑连接池代理(如 PgBouncer)

验证阶段(2 小时)

4.1 测试

  • [ ] 压力测试
  • [ ] 并发注册测试
  • [ ] 长时间运行测试

4.2 监控

  • [ ] 观察连接池指标
    • 活跃连接数
    • 等待请求数
    • 连接创建/释放速率
  • [ ] 观察数据库指标
    • 慢查询数量
    • 锁等待时间

预防措施(1 小时)

5.1 代码审查清单

  • [ ] 确保所有数据库连接都正确释放
  • [ ] 检查事务边界是否正确
  • [ ] 避免长事务

5.2 监控指标

  • [ ] 连接池使用率告警(>80%)
  • [ ] 慢查询告警(>1秒)
  • [ ] 数据库连接数告警

总计

  • 预计时间:9.5 小时
  • 紧急缓解:30 分钟

## 最佳实践

### 1. 明确任务目标

使用清晰、具体的任务描述:

❌ 不好:

改进代码质量


✅ 好:

重构订单处理模块,提高代码可维护性:

  • 减少方法平均长度到 50 行以内
  • 提高测试覆盖率到 90%
  • 移除代码重复

### 2. 提供上下文信息

提供相关的代码、文档和约束:

重构订单处理模块

上下文:

  • 当前代码:OrderService.java(已提供)
  • 使用框架:Spring Boot 3.0
  • 数据库:MySQL 8.0
  • 团队规范:遵循 SOLID 原则
  • 时间限制:2 天内完成

### 3. 按优先级排序

将任务按优先级排序,先完成重要的:

```markdown
## 优先级 P0(必须完成)
- [ ] 核心功能实现

## 优先级 P1(重要)
- [ ] 错误处理
- [ ] 单元测试

## 优先级 P2(可选)
- [ ] 性能优化
- [ ] 文档完善

4. 设置检查点

在关键点设置检查点,验证进度:

markdown
## 检查点

### 检查点 1:设计完成(第 1 天结束)

- [ ] 完成架构设计
- [ ] 通过设计评审

### 检查点 2:核心功能完成(第 2 天中午)

- [ ] 核心功能可运行
- [ ] 通过冒烟测试

### 检查点 3:测试完成(第 2 天结束)

- [ ] 所有测试通过
- [ ] 代码审查通过

下一步