跨文件重命名与符号重构
传统 IDE 的"重命名"只能处理语法层面的引用。Cascade 能处理更复杂的情况:字符串中的命名、动态引用、注释里的引用,甚至需要同步修改 API 文档的情况。
我需要将整个项目中的服务层命名从 "Service" 后缀改为 "Repository" 后缀。
例如:UserService → UserRepository,AuthService → AuthRepository。
请:
1. 找出所有 Service 类/接口/文件
2. 制定重命名计划(包括文件名、类名、接口名、import 语句)
3. 检查是否有字符串中包含 "Service"(如路由路径、日志消息)需要单独处理
4. 执行重命名(保持所有功能不变)
5. 运行 tsc --noEmit 确认类型正确
注意:只重命名服务层,不要动控制器层(Controller)
在现有架构中添加新功能
添加新功能的难点在于"融入"——要遵循现有的代码风格、目录结构、错误处理模式。Cascade 会先理解现有架构,再生成符合风格的新代码:
在现有的 Express + PostgreSQL + Prisma 项目中,
添加"文件上传"功能,要求:
1. 仿照 @src/controllers/posts.controller.ts 的写法
2. 支持:图片(jpg/png/gif/webp)+ PDF,最大 10MB
3. 存储:本地存储(路径:uploads/),生产环境换 S3(已在 @src/lib/storage.ts 中有接口)
4. 文件 URL 存入数据库(posts 表新增 attachment_url 字段,需要 Prisma migration)
5. API:POST /api/posts/:id/attachment
不要引入 multer 以外的新库(multer 已在 package.json)
实战案例 1:REST API 改造为 WebSocket
这是一个典型的重构任务:聊天室功能从轮询改为 WebSocket 实时推送,需要同时修改后端和前端。
我的聊天室目前使用 REST API 轮询(每2秒 GET /api/messages),
需要改造为 WebSocket 实时推送。
现有代码:
- 后端:@server/routes/messages.ts(GET/POST 消息接口)
- 前端:@client/hooks/useMessages.ts(轮询逻辑)
- 前端:@client/components/ChatRoom.tsx(消息展示)
目标架构:
- 后端:ws 库(已安装),复用现有 Express server
- 事件:connect、send_message、receive_message、disconnect
- 前端:原生 WebSocket API(不用 socket.io-client)
- 保留原有 REST API(移动端仍在用)
执行前请先画出新的数据流图,确认我理解正确。
Cascade 会先给出数据流图(ASCII 格式),确认方案后执行多文件修改:
Cascade 生成的数据流图(改造后):
客户端(浏览器) 服务器
│ │
│── WebSocket 握手 ──────────→ │ ws.Server 升级
│ (ws://localhost:3000/ws) │
│ │
│── send_message { │
│ text: "Hello", │ 保存到数据库
│ roomId: "room-1" │ 广播给同房间所有客户端
│ } ─────────────────────→ │
│ │
│ ←─── receive_message { │
│ id, text, │
│ userId, timestamp │
│ } ────────────────── │
│ │
│── (断线) ─────────────────→ │ 清理连接状态
│ (自动重连3次) │
实战案例 2:给 Express 项目添加 TypeScript
将 JavaScript Express 项目迁移到 TypeScript 是最常见的重构任务之一,也是 Cascade 最擅长的场景:
将 @server/ 目录下的 Express 项目从 JavaScript 迁移到 TypeScript。
当前状态:
- 所有文件是 .js,使用 CommonJS(require/module.exports)
- Node.js 18,没有构建步骤(直接 node server.js)
目标:
- TypeScript 5.3,ES modules(import/export)
- tsconfig.json 配置(strict 模式,输出到 dist/)
- 所有函数参数和返回值有类型
- Express Request/Response 类型正确
- 构建命令:npm run build(tsc),运行:npm start(node dist/server.js)
迁移策略(按此顺序):
1. 先配置 tsconfig.json 和 package.json 的 scripts
2. 从 types/ 共享类型定义开始
3. 再迁移 models/ → services/ → routes/ → server.js
4. 每迁移一批文件就运行 tsc --noEmit 确认
请开始执行,遇到难以确定类型的地方先用 unknown,
后续我会逐步细化。
依赖升级:处理破坏性 API 变更
依赖升级(特别是主版本升级)是最令人头疼的重构任务,因为 API 可能大量变更。Cascade 能结合网络搜索最新迁移指南来处理:
请帮我将项目从 React Query v4 升级到 TanStack Query v5。
@Web 搜索 TanStack Query v5 migration guide,
然后:
1. 列出本项目受影响的 API 变更(只列出我实际用到的)
2. 搜索 @src/ 目录中所有使用了 useQuery/useMutation 的文件
3. 按照 v5 的新 API 逐文件修改
4. 特别注意:v5 中 isLoading/isError 行为变更
在修改每个文件之前,先显示该文件需要改动的摘要。
AI 代码审查
Cascade 可以像人工 Code Review 一样审查你的 PR 差异,提出针对性改进建议:
请审查以下代码变更(这是我要提交的 PR diff),
重点关注:
1. 安全问题(SQL注入、XSS、权限控制漏洞)
2. 性能问题(N+1 查询、不必要的重渲染、大对象拷贝)
3. 错误处理遗漏(边界情况、异步错误)
4. 代码规范(与 .windsurfrules 不符的地方)
对于每个问题,给出:严重程度(阻塞/建议/可选)+ 具体建议
[粘贴 git diff 内容]
重构安全原则
执行大规模重构前,务必确保:① 有完整的测试覆盖(没有测试等于没有安全网)② 在独立分支上操作,不直接修改 main ③ 重构时只改结构,不改功能(结构重构和功能开发分开提 PR)。Cascade 会帮你执行,但不会帮你决策"这个改动是否安全上线"——这需要你自己判断。
本章小结
多文件重构是 Windsurf 最能体现 ROI 的场景。关键方法:先分析影响范围再执行、分步验证(每批修改后运行类型检查/测试)、对复杂迁移先给出方案图确认。代码审查功能让 Cascade 成为"不知疲倦的 Reviewer",补充人工 Review 的盲点。