代码开发
本章提供使用 Codex 进行代码开发的核心模式。内容分层组织,从基础工作流到高级协作模式。
基础工作流
1. 从类型/接口开始(推荐初学者)
先定义数据形状,再生成实现:
typescript
interface UserService {
findById(id: string): Promise<User>
create(data: CreateUserDTO): Promise<User>
update(id: string, data: UpdateUserDTO): Promise<User>
delete(id: string): Promise<void>
}
// Codex 会根据接口生成实现为什么有效:类型为 Codex 提供了明确的约束,减少生成不匹配代码的概率。
2. 提供测试用例
> 为这个排序函数编写实现,需通过以下测试:
> - [3,1,2] → [1,2,3]
> - [] → []
> - [1] → [1]
> - 稳定性测试...3. 小步迭代
核心原则
每次只要求 Codex 做一件事,确认正确后再进行下一步。这比一次性要求"实现整个功能"的成功率高得多。
步骤 1: 创建数据模型和类型定义 → 验证类型检查通过
步骤 2: 实现核心业务逻辑 → 运行单元测试通过
步骤 3: 添加错误处理 → 验证边界情况
步骤 4: 优化性能 → 运行基准测试确认代码审查
审查清单
- [ ] 边界条件处理
- [ ] 错误处理完整性
- [ ] 类型安全性
- [ ] 性能隐患(N+1、内存泄露等)
- [ ] 安全漏洞(注入、泄露等)
- [ ] 代码可读性
- [ ] 测试覆盖度
审查指令模板
> 审查 @src/auth/login.ts,重点关注:
> 1. 安全性 — 是否有注入漏洞、明文存储密码
> 2. 性能 — 是否有不必要的重复计算
> 3. 错误处理 — 异常情况是否都被正确捕获和处理审查 AI 生成的代码(进阶)
当 Codex 帮你生成代码后,自我审查同样重要:
> 刚才你生成的代码:
> - 是否引入了不必要的依赖?
> - 是否有更简洁的实现方式?
> - 边界条件是否都覆盖?
> 请先自我审查,然后应用你的改进建议TDD 工作流
bash
# 1. 写测试
> 编写用户认证的测试用例
# 2. 确认测试失败(红)
> 运行测试
# 3. 实现功能(绿)
> 实现最小功能让测试通过
# 4. 确认测试通过
> 运行测试
# 5. 重构
> 重构代码优化结构
# 6. 确认通过
> 再次运行测试注意事项
Codex 有时会直接编写实现代码而非先写测试。在使用 TDD 时,明确告诉它"先写测试,不要先写实现"。
文档生成
让 Codex 自动为代码生成文档:
> 为这个公共 API 生成 JSDoc 注释
> 为这个模块创建 README 文档
> 为新同事生成代码走查文档高级模式
模式 1:Codex 写代码 + 人类审查
最适合日常开发的模式:
1. 向 Codex 描述需求和约束
2. Codex 生成初始实现
3. 人类审查逻辑正确性
4. 运行测试验证
5. 人类做最终调整模式 2:人类设计 + Codex 实现
最适合有明确设计的情况:
1. 人类设计架构和接口
2. 将设计转化为 Codex 可执行的规格
3. Codex 按规格填充实现
4. 人类对结果做微调模式 3:结对编程
最适合探索性工作:
> 我将和你一起实现这个功能
> 我先描述我的思路,你提供反馈和替代方案
> 我们逐步推进,每一步讨论后再继续模式 4:测试驱动 + Codex 补全
最适合风险敏感的场景:
1. 人类编写完整的测试用例
2. Codex 只负责编写让测试通过的最简实现
3. 人类审查后 Codex 进行代码优化避免常见陷阱
陷阱 1:过度信任
❌ 直接提交 Codex 生成的代码而不审查
✅ 始终审查生成的代码后再提交陷阱 2:过于复杂的提示词
❌ "重构整个认证系统,包括前端、后端、数据库迁移"
✅ "第一步:重构 src/auth/ 中的 token 验证逻辑,其他部分暂时不动"陷阱 3:忽略错误处理
❌ "实现用户注册 API"
✅ "实现用户注册 API,包括邮箱格式验证、密码强度检查、数据库约束冲突处理"陷阱 4:不运行测试
❌ Codex "写完了"就直接提交
✅ 始终运行 lint → typecheck → test → build 确认无回归