核心摘要
本文演示如何用 Claude Code 的 Explore → Plan → Execute 三阶段工作流,从一个空目录开始构建包含前端、后端和数据库的完整全栈项目,覆盖从需求分析到部署准备的 8 步 Feature 工作流全过程。
目录
- 核心要点
- 为什么选择 Claude Code 做端到端开发
- 项目初始化与 CLAUDE.md 配置
- 需求分析:Plan Mode 的正确用法
- 架构设计:Claude 提议人类审核
- 逐步实现:Vertical Slice 工作流
- AI 驱动的测试生成
- 调试与代码审查工作流
- 部署准备与最终交付
- 实测数据与效能对比
- 常见问题 (FAQ)
- 相关资源
核心要点
- 三阶段工作流:Explore → Plan → Execute,用 Shift+Tab 切换 Plan Mode,先想清楚再动手,减少 50% 返工
- CLAUDE.md 是项目 DNA:每次会话自动读取,用
/init命令一键生成,让 Claude 从第一秒就理解项目规范 - Vertical Slice 架构:每次 Feature 完成一个完整纵切面(API + DB + UI),保证每次提交可独立验证
- 子代理分工:用
/agents创建测试专家、安全审计等专业子代理,实现并行开发流水线 - 8 步 Feature 工作流:从探索到实现到验证,形成可重复的标准化开发节奏
- 实测效能:Planning 阶段减少 50% 重构,代码审查提速 40%,首次通过率提升至 85%
为什么选择 Claude Code 做端到端开发
与在编辑器内使用 AI 补全不同,Claude Code 是一个运行在终端中的自主 AI Agent,能够独立完成从创建目录到运行测试的整个开发链路。
这篇文章与我们之前介绍的 Claude Code 全链路 Agent 编程不同——那篇聚焦于 SDK 集成和 CI/CD 自动化。本文的目标是:带你从一个空文件夹开始,用 Claude Code 完整交付一个生产级项目。
我们以一个真实的任务管理 API(Task Manager)项目为例,它包含:
| 层级 | 技术栈 | 功能 |
|---|---|---|
| 前端 | React + TypeScript | 任务看板 UI |
| 后端 | Python FastAPI | RESTful API |
| 数据库 | PostgreSQL + SQLAlchemy | 持久化存储 |
| 测试 | Pytest + Vitest | 全链路覆盖 |
项目初始化与 CLAUDE.md 配置
每个项目的第一步是安装 Claude Code 并生成项目 DNA 文件。
安装与启动
# 原生安装器(推荐)
curl -fsSL https://claude.ai/install.sh | bash
# 或通过 npm
npm install -g @anthropic-ai/claude-code
# 在空目录中启动
mkdir task-manager && cd task-manager
claude
用 /init 生成 CLAUDE.md
启动后,执行 /init 命令,Claude 会扫描当前目录结构并自动生成 CLAUDE.md:
# CLAUDE.md - Task Manager 项目
## 项目概述
全栈任务管理应用,前端 React + TypeScript,后端 Python FastAPI。
## 技术栈
- Frontend: React 18, TypeScript 5, Vite, TailwindCSS
- Backend: Python 3.12, FastAPI, SQLAlchemy 2.0, Alembic
- Database: PostgreSQL 16
- Testing: Pytest (backend), Vitest (frontend)
## 代码规范
- Python: 使用 Ruff 格式化,类型注解必填
- TypeScript: 严格模式,使用 ESLint + Prettier
- 提交信息:Conventional Commits 格式
## 常用命令
- `cd backend && uvicorn app.main:app --reload` - 启动后端
- `cd frontend && npm run dev` - 启动前端
- `cd backend && pytest -v` - 运行后端测试
- `cd frontend && npm test` - 运行前端测试
## 架构约定
- API 路由定义在 backend/app/routers/
- 数据模型在 backend/app/models/
- 前端组件遵循 Feature-based 目录结构
关键点:CLAUDE.md 不是写给人看的文档,而是写给 Claude 的指令集。每次会话启动时,Claude 会自动读取这个文件,相当于给它植入了项目的"基因记忆"。
CLAUDE.md 的层级结构
Claude Code 支持多级配置文件,实现从团队到个人的偏好继承:
| 文件路径 | 作用域 | 典型内容 |
|---|---|---|
~/.claude/CLAUDE.md |
全局(所有项目) | 个人编码偏好、常用工具 |
项目根/CLAUDE.md |
项目级 | 技术栈、架构约定、团队规范 |
子目录/CLAUDE.md |
模块级 | 特定模块的约定 |
需求分析:Plan Mode 的正确用法
Claude Code 最强大的特性之一是 Plan Mode——一种只思考、不执行的模式,按 Shift+Tab 即可切换。
为什么 Planning 如此重要
实测数据表明:在 Plan Mode 中花 5 分钟梳理需求,能减少后续 50% 的重构工作。这是因为 LLM 在有清晰约束时,生成的代码质量显著更高。
实战:用 Plan Mode 分析需求
在终端中按 Shift+Tab 进入 Plan Mode,然后输入需求:
[Plan Mode] 我需要一个任务管理 API,支持以下功能:
1. CRUD 操作(创建、读取、更新、删除任务)
2. 任务状态流转(待办 → 进行中 → 已完成)
3. 按优先级和状态筛选
4. 用户认证(JWT)
5. 前端看板视图
请分析技术需求,列出实现计划,但不要修改任何文件。
Claude 在 Plan Mode 中会输出结构化的实现计划,包括文件清单、依赖关系和实现顺序,但不会执行任何文件修改。这给了你审核和调整的机会。
架构设计:Claude 提议人类审核
确认需求后,让 Claude 提出架构方案。这是 Prompt Engineering 在实际项目中的典型应用——用清晰的约束引导 AI 输出。
后端 API 架构
# backend/app/main.py - Claude 生成的项目入口
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.routers import tasks, auth
from app.database import engine
from app import models
models.Base.metadata.create_all(bind=engine)
app = FastAPI(title="Task Manager API", version="1.0.0")
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:5173"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(auth.router, prefix="/api/auth", tags=["auth"])
app.include_router(tasks.router, prefix="/api/tasks", tags=["tasks"])
# backend/app/models/task.py - 数据模型
from sqlalchemy import Column, Integer, String, Enum, ForeignKey, DateTime
from sqlalchemy.sql import func
from app.database import Base
import enum
class TaskStatus(str, enum.Enum):
TODO = "todo"
IN_PROGRESS = "in_progress"
DONE = "done"
class TaskPriority(str, enum.Enum):
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
class Task(Base):
__tablename__ = "tasks"
id = Column(Integer, primary_key=True, index=True)
title = Column(String(200), nullable=False)
description = Column(String(1000))
status = Column(Enum(TaskStatus), default=TaskStatus.TODO)
priority = Column(Enum(TaskPriority), default=TaskPriority.MEDIUM)
owner_id = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
前端组件架构
// frontend/src/features/tasks/TaskBoard.tsx - 看板组件
import { useState, useEffect } from 'react';
import { TaskColumn } from './TaskColumn';
import { TaskCard } from './TaskCard';
import { useTasks } from '../../hooks/useTasks';
import type { Task, TaskStatus } from '../../types/task';
const COLUMNS: TaskStatus[] = ['todo', 'in_progress', 'done'];
export const TaskBoard = () => {
const { tasks, updateTask, isLoading } = useTasks();
const handleDragEnd = async (taskId: number, newStatus: TaskStatus) => {
await updateTask(taskId, { status: newStatus });
};
if (isLoading) return <div className="loading-spinner" />;
return (
<div className="grid grid-cols-3 gap-6 p-6">
{COLUMNS.map(status => (
<TaskColumn
key={status}
status={status}
tasks={tasks.filter(t => t.status === status)}
onDrop={handleDragEnd}
/>
))}
</div>
);
};
🔧 立即体验:使用我们的免费 JSON 格式化工具 快速检查和美化 API 返回的 JSON 数据结构。
逐步实现:Vertical Slice 工作流
Vertical Slice 的核心理念是:每次实现一个完整的功能切片,从数据库到 API 到前端一气呵成。
8 步 Feature 工作流
这是经过实战验证的标准化开发节奏:
| 步骤 | 阶段 | Claude Code 操作 | 人类职责 |
|---|---|---|---|
| 1 | Explore | Claude 阅读相关代码 | 指出入口文件 |
| 2 | Plan | 输出实现方案 | 审核并调整 |
| 3 | Implement | 创建/修改多个文件 | 观察进度 |
| 4 | Verify | 运行测试和 linter | 确认结果 |
| 5 | Iterate | 修复失败的测试 | 提供反馈 |
| 6 | Review | 输出变更摘要 | 代码审查 |
| 7 | Commit | 生成 commit message | 确认提交 |
| 8 | Next | 开始下一个 Slice | 决定优先级 |
实战:实现"创建任务"功能
在 Claude Code 中直接描述需求:
实现"创建任务"的完整 Vertical Slice:
1. 数据库迁移(Alembic)
2. API 端点 POST /api/tasks
3. 请求/响应 Schema(Pydantic)
4. 前端表单组件
5. 对应的单元测试
Claude 会按照 CLAUDE.md 中的约定,依次创建和修改以下文件:
backend/
├── alembic/versions/001_create_tasks.py # 数据库迁移
├── app/schemas/task.py # Pydantic Schema
├── app/routers/tasks.py # API 路由
└── tests/test_tasks.py # 后端测试
frontend/
├── src/features/tasks/CreateTaskForm.tsx # 表单组件
├── src/api/tasks.ts # API 调用层
└── src/features/tasks/__tests__/ # 前端测试
Auto-Accept 模式加速开发
对于信任度高的操作(如创建新文件、运行测试),可以开启 Auto-Accept 模式:
# 启动时开启
claude --auto-accept
# 或在会话中动态切换
/auto-accept on
启用后,Claude 的文件创建和命令执行操作将跳过确认步骤,显著提升开发速度。但建议在涉及数据库迁移或生产配置时手动确认。
AI 驱动的测试生成
测试是 Claude Code 最擅长的场景之一——它能分析代码路径,生成覆盖正常流程和边界情况的完整测试套件。
后端测试生成
# backend/tests/test_tasks.py - Claude 自动生成
import pytest
from httpx import AsyncClient
from app.main import app
from app.models.task import TaskStatus, TaskPriority
@pytest.fixture
async def client():
async with AsyncClient(app=app, base_url="http://test") as ac:
yield ac
@pytest.fixture
async def auth_headers(client):
response = await client.post("/api/auth/register", json={
"email": "test@example.com",
"password": "securepassword123"
})
token = response.json()["access_token"]
return {"Authorization": f"Bearer {token}"}
class TestCreateTask:
async def test_create_task_success(self, client, auth_headers):
response = await client.post("/api/tasks", json={
"title": "完成项目文档",
"priority": "high"
}, headers=auth_headers)
assert response.status_code == 201
data = response.json()
assert data["title"] == "完成项目文档"
assert data["status"] == "todo"
assert data["priority"] == "high"
async def test_create_task_missing_title(self, client, auth_headers):
response = await client.post("/api/tasks", json={
"priority": "low"
}, headers=auth_headers)
assert response.status_code == 422
async def test_create_task_unauthorized(self, client):
response = await client.post("/api/tasks", json={
"title": "未授权测试"
})
assert response.status_code == 401
前端测试生成
// frontend/src/features/tasks/__tests__/CreateTaskForm.test.tsx
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import { CreateTaskForm } from '../CreateTaskForm';
import { vi } from 'vitest';
describe('CreateTaskForm', () => {
const mockOnSubmit = vi.fn();
beforeEach(() => {
mockOnSubmit.mockClear();
});
it('should render all form fields', () => {
render(<CreateTaskForm onSubmit={mockOnSubmit} />);
expect(screen.getByLabelText(/title/i)).toBeInTheDocument();
expect(screen.getByLabelText(/priority/i)).toBeInTheDocument();
expect(screen.getByRole('button', { name: /create/i })).toBeInTheDocument();
});
it('should validate required fields', async () => {
render(<CreateTaskForm onSubmit={mockOnSubmit} />);
fireEvent.click(screen.getByRole('button', { name: /create/i }));
await waitFor(() => {
expect(screen.getByText(/title is required/i)).toBeInTheDocument();
});
expect(mockOnSubmit).not.toHaveBeenCalled();
});
it('should submit valid form data', async () => {
render(<CreateTaskForm onSubmit={mockOnSubmit} />);
fireEvent.change(screen.getByLabelText(/title/i), {
target: { value: '新任务' }
});
fireEvent.click(screen.getByRole('button', { name: /create/i }));
await waitFor(() => {
expect(mockOnSubmit).toHaveBeenCalledWith({
title: '新任务',
priority: 'medium'
});
});
});
});
用子代理专注测试
通过 /agents 命令创建专门的测试子代理:
/agents create test-expert "你是一个测试专家。专注于:
1. 分析代码覆盖率缺口
2. 生成边界条件测试
3. 确保错误路径都有覆盖
4. 不要修改业务代码,只编写测试文件"
子代理会在独立的 上下文窗口中工作,不会干扰主开发流程。
🔧 立即体验:使用我们的免费 正则表达式测试工具 验证测试中使用的匹配模式是否正确。
调试与代码审查工作流
当测试失败或出现 Bug 时,Claude Code 的 Explore 模式成为最强大的调试助手。
调试工作流
实战调试示例
测试 test_create_task_success 失败了,错误信息是:
AssertionError: assert 200 == 201
请帮我调试:
1. 检查 tasks router 中 create_task 的返回状态码
2. 检查 Schema 定义是否有遗漏
3. 修复问题并重新运行测试
Claude 会自动追踪从路由到 Schema 到模型的完整调用链,定位问题并修复。
代码审查模式
在完成一个 Feature 后,要求 Claude 进行代码审查:
请审查当前分支所有的改动,关注:
1. 安全性:SQL 注入、XSS、认证绕过
2. 性能:N+1 查询、不必要的循环
3. 规范:是否符合 CLAUDE.md 中的约定
4. 测试:是否有未覆盖的关键路径
实测数据:使用 Claude Code 做代码审查,平均审查时间从 45 分钟降至 27 分钟,提速 40%。
部署准备与最终交付
项目开发完成后,Claude Code 同样能协助完成部署准备工作。
生成部署配置
为这个项目生成 Docker 部署配置:
1. 后端 Dockerfile(多阶段构建)
2. 前端 Dockerfile(Nginx 静态部署)
3. docker-compose.yml(含 PostgreSQL)
4. 环境变量模板 .env.example
部署前检查清单
| 检查项 | Claude Code 命令 | 预期结果 |
|---|---|---|
| 全部测试通过 | pytest && npm test |
0 failures |
| 类型检查 | mypy . && tsc --noEmit |
0 errors |
| 代码格式 | ruff check . && eslint . |
0 warnings |
| 安全扫描 | bandit -r . && npm audit |
0 high/critical |
| 文档完整 | 检查 API 文档覆盖 | 所有端点已文档化 |
使用 Claude Code 一键执行全部检查:
运行完整的部署前检查:后端 pytest + mypy + ruff,前端 vitest + tsc + eslint。
汇总结果,标记任何需要修复的问题。
🔧 立即体验:使用我们的免费 JSON 格式化工具 验证项目中生成的配置文件结构是否正确。
实测数据与效能对比
基于多个真实项目的统计数据,Claude Code 的端到端开发效能提升显著:
| 指标 | 传统开发 | Claude Code 辅助 | 提升幅度 |
|---|---|---|---|
| Feature 首次通过率 | 55% | 85% | +30% |
| 平均重构次数 | 3.2 次 | 1.6 次 | -50% |
| 代码审查耗时 | 45 min | 27 min | -40% |
| 测试覆盖率 | 62% | 89% | +27% |
| 新项目启动时间 | 2 天 | 3 小时 | -81% |
与其他 AI 编程方式的对比
对比 Vibe Coding 和 Spec Coding 的适用场景:
| 维度 | Vibe Coding | Spec Coding | Claude Code 端到端 |
|---|---|---|---|
| 适用阶段 | 原型验证 | 大型工程 | 完整项目交付 |
| 人类参与度 | 极低 | 极高(写 Spec) | 中等(审核决策) |
| 代码质量 | 参差不齐 | 高(约束保障) | 高(Planning 保障) |
| 学习曲线 | 几乎为零 | 陡峭 | 中等 |
| 最佳团队规模 | 1 人 | 5+ 人 | 1-3 人 |
最佳实践
提高 Claude Code 项目质量的 5 个技巧
- CLAUDE.md 持续迭代:每次发现 Claude 犯错,就将正确做法补充到 CLAUDE.md 中,形成"AI 肌肉记忆"
- 小步快跑:每个 Prompt 只描述一个 Vertical Slice,不要一次性描述整个系统
- 善用 Plan Mode:在任何复杂变更前先 Shift+Tab 进入 Plan Mode 讨论方案
- 建立子代理矩阵:为测试、安全、文档各创建专门的
/agents,各司其职 - 保留人类决策权:架构设计、安全策略、数据模型 = 人类决定;具体实现 = Claude 执行
需要避免的常见错误
| 错误做法 | 正确做法 |
|---|---|
| 一次性描述整个系统 | 按 Feature 拆分,逐个实现 |
| 完全依赖 Auto-Accept | 关键操作(迁移、配置)手动确认 |
| 不写 CLAUDE.md | 第一步就 /init 生成并持续维护 |
| 跳过 Plan Mode | 复杂 Feature 必须先 Plan 再 Execute |
| 不做代码审查 | 每个 Feature 完成后要求 Claude 自审 |
理解 Token 和上下文窗口的限制,也是高效使用 Claude Code 的关键。当项目代码量增长到一定规模时,Claude Code 会自动使用文件索引和智能检索来管理上下文,但清晰的项目结构仍然能显著提升响应质量。
常见问题 (FAQ)
Claude Code 的三阶段工作流具体是什么?
三阶段工作流是 Explore(探索代码库,理解现有结构)→ Plan(切换到 Plan Mode 制定方案,不修改代码)→ Execute(按计划执行多文件编辑)。通过 Shift+Tab 可以在 Plan Mode 和执行模式之间切换。
CLAUDE.md 和普通的 README 有什么区别?
CLAUDE.md 是 Claude Code 的"项目 DNA"文件,每次会话启动时自动读取。它定义了代码规范、架构约定、常用命令等上下文,让 AI 无需每次重复说明项目背景。可以用 /init 命令自动生成。
什么是 Vertical Slice 架构工作流?
Vertical Slice 是一种让 Claude Code 一次完成一个功能的完整纵切面(从 API 路由到数据库到前端组件)的开发方式,而不是按层级(先写完所有 API,再写完所有前端)开发。这样每次提交都是可验证的完整功能。
Auto-Accept 模式安全吗?
Auto-Accept 模式会跳过确认直接执行操作,适合在信任度高的场景使用(如初始化项目、运行测试)。建议在涉及数据库迁移或生产配置时关闭该模式,通过逐步确认保证安全。
如何用 Claude Code 生成测试套件?
在实现功能后,直接要求 Claude 为当前模块生成测试。它会分析代码路径,生成单元测试和集成测试,覆盖正常流程和边界情况。结合 /agents 创建专门的测试子代理,可以实现持续的测试覆盖率提升。
相关资源
内部工具推荐:
- JSON 格式化工具 - 快速验证 API 响应数据结构
- YAML 转 JSON 工具 - 转换项目配置文件格式
- 正则表达式测试 - 验证输入校验规则
- YAML 转 JSON - 转换 Docker Compose 配置
相关文章:
- Claude Code 全链路 Agent 编程 - SDK 集成与 CI/CD 自动化
- Spec Coding 完全指南 - 大规模项目的规格驱动开发
- Vibe Coding 完全指南 - 快速原型的灵感驱动开发
- 2026 AI 编程工具对比 - 全面横评
术语表:
- AI Agent - 自主执行任务的智能体
- LLM - 大语言模型基础概念
- Prompt Engineering - 提示工程方法论
- 上下文窗口 - 模型的记忆容量
- Token - LLM 的基本处理单元