核心摘要

本文演示如何用 Claude Code 的 Explore → Plan → Execute 三阶段工作流,从一个空目录开始构建包含前端、后端和数据库的完整全栈项目,覆盖从需求分析到部署准备的 8 步 Feature 工作流全过程。

目录

核心要点

  • 三阶段工作流: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 完整交付一个生产级项目

graph LR A["空目录"] --> B["CLAUDE.md 初始化"] B --> C["需求分析 (Plan Mode)"] C --> D["架构设计"] D --> E["逐步实现 (Vertical Slice)"] E --> F["测试生成"] F --> G["调试与审查"] G --> H["部署准备"]

我们以一个真实的任务管理 API(Task Manager)项目为例,它包含:

层级 技术栈 功能
前端 React + TypeScript 任务看板 UI
后端 Python FastAPI RESTful API
数据库 PostgreSQL + SQLAlchemy 持久化存储
测试 Pytest + Vitest 全链路覆盖

项目初始化与 CLAUDE.md 配置

每个项目的第一步是安装 Claude Code 并生成项目 DNA 文件。

安装与启动

bash
# 原生安装器(推荐)
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

markdown
# 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 在有清晰约束时,生成的代码质量显著更高。

graph TD A["开始新 Feature"] --> B{"是否理解需求?"} B -->|"否"| C["Shift+Tab → Plan Mode"] C --> D["Claude 分析需求并输出计划"] D --> E{"人类审核计划"} E -->|"调整"| C E -->|"批准"| F["Shift+Tab → Execute Mode"] F --> G["Claude 按计划实现"] B -->|"是"| F

实战:用 Plan Mode 分析需求

在终端中按 Shift+Tab 进入 Plan Mode,然后输入需求:

code
[Plan Mode] 我需要一个任务管理 API,支持以下功能:
1. CRUD 操作(创建、读取、更新、删除任务)
2. 任务状态流转(待办 → 进行中 → 已完成)
3. 按优先级和状态筛选
4. 用户认证(JWT)
5. 前端看板视图

请分析技术需求,列出实现计划,但不要修改任何文件。

Claude 在 Plan Mode 中会输出结构化的实现计划,包括文件清单、依赖关系和实现顺序,但不会执行任何文件修改。这给了你审核和调整的机会。

架构设计:Claude 提议人类审核

确认需求后,让 Claude 提出架构方案。这是 Prompt Engineering 在实际项目中的典型应用——用清晰的约束引导 AI 输出。

后端 API 架构

python
# 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"])
python
# 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())

前端组件架构

typescript
// 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 中直接描述需求:

code
实现"创建任务"的完整 Vertical Slice:
1. 数据库迁移(Alembic)
2. API 端点 POST /api/tasks
3. 请求/响应 Schema(Pydantic)
4. 前端表单组件
5. 对应的单元测试

Claude 会按照 CLAUDE.md 中的约定,依次创建和修改以下文件:

code
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 模式:

bash
# 启动时开启
claude --auto-accept

# 或在会话中动态切换
/auto-accept on

启用后,Claude 的文件创建和命令执行操作将跳过确认步骤,显著提升开发速度。但建议在涉及数据库迁移或生产配置时手动确认。

AI 驱动的测试生成

测试是 Claude Code 最擅长的场景之一——它能分析代码路径,生成覆盖正常流程和边界情况的完整测试套件。

后端测试生成

python
# 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

前端测试生成

typescript
// 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 命令创建专门的测试子代理:

code
/agents create test-expert "你是一个测试专家。专注于:
1. 分析代码覆盖率缺口
2. 生成边界条件测试
3. 确保错误路径都有覆盖
4. 不要修改业务代码,只编写测试文件"

子代理会在独立的 上下文窗口中工作,不会干扰主开发流程。

🔧 立即体验:使用我们的免费 正则表达式测试工具 验证测试中使用的匹配模式是否正确。

调试与代码审查工作流

当测试失败或出现 Bug 时,Claude Code 的 Explore 模式成为最强大的调试助手。

调试工作流

graph TD A["测试失败 / Bug 报告"] --> B["Claude Explore 模式"] B --> C["阅读错误堆栈"] C --> D["追踪相关代码路径"] D --> E["定位 Root Cause"] E --> F{"需要更多上下文?"} F -->|"是"| B F -->|"否"| G["Plan Mode 制定修复方案"] G --> H["Execute 修复"] H --> I["重新运行测试"] I -->|"通过"| J["提交修复"] I -->|"失败"| B

实战调试示例

code
测试 test_create_task_success 失败了,错误信息是:
AssertionError: assert 200 == 201

请帮我调试:
1. 检查 tasks router 中 create_task 的返回状态码
2. 检查 Schema 定义是否有遗漏
3. 修复问题并重新运行测试

Claude 会自动追踪从路由到 Schema 到模型的完整调用链,定位问题并修复。

代码审查模式

在完成一个 Feature 后,要求 Claude 进行代码审查:

code
请审查当前分支所有的改动,关注:
1. 安全性:SQL 注入、XSS、认证绕过
2. 性能:N+1 查询、不必要的循环
3. 规范:是否符合 CLAUDE.md 中的约定
4. 测试:是否有未覆盖的关键路径

实测数据:使用 Claude Code 做代码审查,平均审查时间从 45 分钟降至 27 分钟,提速 40%

部署准备与最终交付

项目开发完成后,Claude Code 同样能协助完成部署准备工作。

生成部署配置

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 一键执行全部检查:

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 CodingSpec Coding 的适用场景:

维度 Vibe Coding Spec Coding Claude Code 端到端
适用阶段 原型验证 大型工程 完整项目交付
人类参与度 极低 极高(写 Spec) 中等(审核决策)
代码质量 参差不齐 高(约束保障) 高(Planning 保障)
学习曲线 几乎为零 陡峭 中等
最佳团队规模 1 人 5+ 人 1-3 人

最佳实践

提高 Claude Code 项目质量的 5 个技巧

  1. CLAUDE.md 持续迭代:每次发现 Claude 犯错,就将正确做法补充到 CLAUDE.md 中,形成"AI 肌肉记忆"
  2. 小步快跑:每个 Prompt 只描述一个 Vertical Slice,不要一次性描述整个系统
  3. 善用 Plan Mode:在任何复杂变更前先 Shift+Tab 进入 Plan Mode 讨论方案
  4. 建立子代理矩阵:为测试、安全、文档各创建专门的 /agents,各司其职
  5. 保留人类决策权:架构设计、安全策略、数据模型 = 人类决定;具体实现 = 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 创建专门的测试子代理,可以实现持续的测试覆盖率提升。

相关资源

内部工具推荐

相关文章

术语表