第 4 章:实施计划 — 把设计拆成可执行的任务
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
你将学到什么
- 从设计稿和需求文档出发,写一份实施计划
- 用 superpowers 的
/writing-plans命令自动生成详细任务列表 - 理解好的计划长什么样:每步有代码、有测试、有 commit
4.1 为什么需要实施计划
第 2 章我们理清了需求,第 3 章我们做好了设计。现在该写代码了?
还差一步——把设计拆成任务。
原因很简单:
| 不拆任务 | 拆了任务 |
|---|---|
| "帮我实现 NoteFlow" — Claude 一次写几千行 | "先实现 useNotes Hook" — Claude 写 50 行,测试通过 |
| 出错不知道哪里坏了 | 每步都有测试,坏了立即发现 |
| 改一个功能影响其他功能 | 每个任务独立,互不影响 |
| 没有检查点,不知道进度 | 每完成一个任务就 commit,进度清晰 |
4.2 /writing-plans — 自动生成实施计划
命令语法
/writing-plans [需求描述或设计文档路径]
实战:为 NoteFlow 生成实施计划
在 Claude Code 中输入:
/writing-plans
基于以下文档生成实施计划:
- 需求文档:docs/notes/requirement-review.md(第 2 章产出)
- 设计系统:src/styles/design-system.css(第 3 章产出)
- HTML 设计稿:src/pages/index.html(第 3 章产出)
目标:实现 NoteFlow 的 P0 功能(笔记 CRUD + localStorage)
技术栈:React 18 + Vite + vitest
Claude 会做什么:
- 读取你的需求文档和设计稿
- 分析需要创建/修改哪些文件
- 拆成 5-8 个独立任务
- 每个任务包含:文件路径、代码、测试、commit 命令
4.3 好的计划长什么样
/writing-plans 产出的计划文档大致是这样:
# NoteFlow P0 实施计划
## 文件结构
src/
├── components/
│ ├── NoteList.jsx — 笔记列表组件
│ ├── NoteList.test.jsx — 列表组件测试
│ ├── NoteEditor.jsx — 编辑器组件
│ ├── NoteEditor.test.jsx— 编辑器测试
│ └── SearchBar.jsx — 搜索栏组件
├── hooks/
│ ├── useNotes.js — 笔记数据管理 Hook
│ └── useNotes.test.js — Hook 测试
├── utils/
│ └── storage.js — localStorage 封装
├── App.jsx — 主应用
└── App.test.jsx — 集成测试
---
### Task 1: localStorage 工具函数
**文件:**
- 创建: `src/utils/storage.js`
- 测试: `src/utils/storage.test.js`
- [ ] **Step 1: 写测试**
\```javascript
import { saveNotes, loadNotes, getStorageUsage } from './storage';
describe('storage', () => {
beforeEach(() => localStorage.clear());
test('saveNotes stores data to localStorage', () => {
const notes = [{ id: '1', title: 'Test', content: 'Hello' }];
saveNotes(notes);
expect(JSON.parse(localStorage.getItem('noteflow-notes'))).toEqual(notes);
});
test('loadNotes returns empty array when no data', () => {
expect(loadNotes()).toEqual([]);
});
test('getStorageUsage returns percentage', () => {
saveNotes([{ id: '1', title: 'A'.repeat(1000), content: '' }]);
const usage = getStorageUsage();
expect(usage).toBeGreaterThan(0);
expect(usage).toBeLessThan(100);
});
});
\```
- [ ] **Step 2: 运行测试确认失败**
运行: `npm test -- src/utils/storage.test.js`
预期: FAIL(函数未定义)
- [ ] **Step 3: 实现最小代码**
\```javascript
const STORAGE_KEY = 'noteflow-notes';
const MAX_STORAGE_MB = 5;
export function saveNotes(notes) {
localStorage.setItem(STORAGE_KEY, JSON.stringify(notes));
}
export function loadNotes() {
const data = localStorage.getItem(STORAGE_KEY);
return data ? JSON.parse(data) : [];
}
export function getStorageUsage() {
const data = localStorage.getItem(STORAGE_KEY) || '';
const usedBytes = new Blob([data]).size;
const maxBytes = MAX_STORAGE_MB * 1024 * 1024;
return (usedBytes / maxBytes) * 100;
}
\```
- [ ] **Step 4: 运行测试确认通过**
运行: `npm test -- src/utils/storage.test.js`
预期: 3 tests PASSED
- [ ] **Step 5: Commit**
\```bash
git add src/utils/storage.js src/utils/storage.test.js
git commit -m "feat: add localStorage utility functions"
\```
Task 2-5: 依次类推
每个任务都遵循同样的结构:写测试 → 确认失败 → 写代码 → 确认通过 → commit。
4.4 计划质量的检查标准
/writing-plans 生成计划后,Claude 会自动做一轮自检。你也可以手动检查:
| 检查项 | 好的计划 | 差的计划 |
|---|---|---|
| 代码完整性 | 每步都有完整代码 | "在此处实现存储逻辑" |
| 测试覆盖 | 每个功能都有测试 | "为上面的代码添加测试" |
| 文件路径 | 精确到文件和行号 | "在适当的位置创建文件" |
| 任务独立性 | 每个任务可单独完成 | "参照 Task 3 的实现" |
| 无 placeholder | 没有 TODO/TBD | "后续补充错误处理" |
4.5 审查和批准计划
计划生成后,你有两个选择:
flowchart TB
P[计划文档生成] --> Q{怎么执行?}
Q --> A["选项 A:Subagent 驱动
(推荐)
每个 task 派一个 subagent
自动编码+审查"]
Q --> B["选项 B:手动执行
自己一步步跟着做
学习每个细节"]
A --> AA["/subagent-driven-development
下一章讲解"]
B --> BB["自己执行每个 Step
适合第一次学习"]
style A fill:#dcfce7,stroke:#16a34a
style B fill:#fef3c7,stroke:#d97706建议: 第一次跟教程选手动执行(理解每个步骤)。后续项目选 subagent 驱动(效率最高)。
动手做
- 准备好第 2 章的需求文档和第 3 章的设计稿
- 运行
/writing-plans,生成 NoteFlow 的实施计划 - 审查计划:每个任务都有代码吗?有测试吗?没有 placeholder 吗?
- 保存计划到
docs/superpowers/plans/noteflow-p0.md
本章小结
| 概念 | 说明 |
|---|---|
/writing-plans |
根据需求和设计自动生成详细实施计划 |
| 任务粒度 | 每个任务 = 一个文件改动 + 测试 + commit |
| TDD 顺序 | 先写测试(红灯)→ 写代码(绿灯)→ 重构 |
| 计划自检 | 无 placeholder、有完整代码、有精确路径 |
核心原则: 计划越详细,执行越顺利。每步都有代码和测试,不需要临时做决定。