Development
增量式实现
以增量方式交付变更。当实现任何涉及多个文件的功能或改动时使用。
以纵向薄切片的方式构建——实现一小块,对其进行测试、验证,然后再扩展。
使用场景
- 实现任何涉及多个文件的变更
- 根据任务拆解构建新功能
- 重构现有代码
- 任何时候,当你想在测试之前写超过约 100 行代码时
增量循环
┌──────────────────────────────────────┐
│ │
│ Implement ──→ Test ──→ Verify ──┐ │
│ ▲ │ │
│ └───── Commit ◄─────────────┘ │
│ │ │
│ ▼ │
│ Next slice │
│ │
└──────────────────────────────────────┘
对于每个切片:
- 实现最小的完整功能片段
- 测试——运行测试套件
- 验证——确认该切片按预期工作
- 提交(Commit)——用描述清晰的信息保存你的进展
- 进入下一个切片
切分策略
纵向切片(推荐)
构建一条贯穿整个技术栈的完整路径:
Slice 1: Create a task (DB + API + basic UI)
→ Tests pass, user can create a task via the UI
Slice 2: List tasks (query + API + UI)
→ Tests pass, user can see their tasks
Slice 3: Edit a task (update + API + UI)
→ Tests pass, user can modify tasks
Slice 4: Delete a task (delete + API + UI + confirmation)
→ Tests pass, full CRUD complete
风险优先切分
先攻克风险最高的部分:
Slice 1: Prove the WebSocket connection works (highest risk)
Slice 2: Build real-time task updates on the proven connection
Slice 3: Add offline support and reconnection
实现规则
规则 0:简单优先
在编写任何代码之前,先问:“能行得通的最简单做法是什么?”
SIMPLICITY CHECK:
✗ Generic EventBus with middleware pipeline for one notification
✓ Simple function call
✗ Abstract factory pattern for two similar components
✓ Two straightforward components with shared utilities
✗ Config-driven form builder for three forms
✓ Three form components
规则 0.5:范围纪律
只改动任务所需的部分。不要“顺手整理”相邻的代码。
规则 1:一次只做一件事
每个增量只改动一件逻辑上的事情。不要混淆关注点。
规则 2:保持可编译
每次增量之后,项目必须能够构建,且现有测试必须通过。
规则 3:为未完成的功能使用特性开关
const ENABLE_TASK_SHARING = process.env.FEATURE_TASK_SHARING === 'true';
if (ENABLE_TASK_SHARING) {
// New sharing UI
}
规则 4:安全的默认值
新代码应默认采用安全、保守的行为:
export function createTask(data: TaskInput, options?: { notify?: boolean }) {
const shouldNotify = options?.notify ?? false;
// ...
}
规则 5:易于回滚
每个增量都应能够独立回退。
增量检查清单
每次增量之后:
- 该变更只做一件事,并且完整地做好它
- 所有现有测试仍然通过(
npm test) - 构建成功(
npm run build) - 类型检查通过(
npx tsc --noEmit) - 代码检查通过(
npm run lint) - 新功能按预期工作
- 该变更已用描述清晰的信息提交
验证
完成一个任务的所有增量之后:
- 每个增量都已单独测试并提交
- 完整测试套件通过
- 构建干净无误
- 功能按规范端到端工作
- 没有残留的未提交变更