跳转至

大型项目架构

在 10 万行以上的代码库中应用 Vibe Coding,需要系统性的架构策略。

核心挑战

大型项目的 Vibe Coding 面临三个核心挑战:

  1. 上下文爆炸:相关代码分散在数十个文件中
  2. 一致性维护:AI 生成的代码需要与现有架构保持一致
  3. 影响面评估:一个改动可能影响多个模块

架构分层策略

建立清晰的模块边界

src/
├── core/          # 核心业务逻辑(最稳定,最少改动)
├── features/      # 功能模块(按业务域划分)
│   ├── auth/
│   ├── orders/
│   └── products/
├── shared/        # 跨模块共享(工具函数、类型定义)
├── infrastructure/ # 基础设施(数据库、缓存、消息队列)
└── api/           # API 层(路由、中间件)

Vibe Coding 原则:每次任务只在一个模块内工作,跨模块改动需要拆分为多个任务。

接口优先设计

在让 AI 实现之前,先定义模块接口:

// 先定义接口(人工设计)
interface OrderRepository {
  findById(id: string): Promise<Order | null>
  findByUserId(userId: string, page: Page): Promise<PageResult<Order>>
  create(data: CreateOrderData): Promise<Order>
  updateStatus(id: string, status: OrderStatus): Promise<Order>
}

// 再让 AI 实现(基于接口)
// 任务:实现 PostgresOrderRepository,满足 OrderRepository 接口
// 约束:使用 Prisma ORM,不改动接口定义

代码库知识管理

架构决策记录(ADR)

为每个重要的架构决策创建 ADR 文件,让 AI 理解"为什么这样设计":

# ADR-001: 使用 Repository 模式隔离数据访问

## 状态:已采纳

## 背景
直接在 Service 层调用 ORM 导致测试困难,且数据库实现细节泄漏到业务层。

## 决策
所有数据访问通过 Repository 接口进行,Service 层只依赖接口。

## 影响
- 新增数据访问功能必须通过 Repository 接口
- 不允许在 Service 层直接使用 Prisma Client

项目规则文件

把架构约定(模块依赖规则、禁止事项)写入项目规则文件,让 AI 每次自动遵守。规则文件的格式和团队维护规范详见团队协作规范

重构策略

渐进式重构

不要一次性重构整个模块,采用"绞杀者模式":

graph LR
    A[旧实现] --> B[新接口包装层]
    B --> C[新实现(逐步迁移)]
    B --> A
  1. 创建新接口,让旧实现满足该接口
  2. 逐步把调用方迁移到新接口
  3. 当所有调用方迁移完成,删除旧实现

AI 辅助重构的安全边界

安全的 AI 重构任务:
- 提取重复代码到工具函数
- 把大函数拆分为小函数
- 添加类型注解
- 统一错误处理模式

需要人工主导的重构:
- 改变模块边界
- 修改核心数据模型
- 改变认证授权逻辑
- 修改公共 API 接口

测试策略

大型项目的测试分层:

层次 覆盖目标 AI 辅助程度
单元测试 纯函数、工具函数 高(AI 可以批量生成)
集成测试 Repository、Service 中(需要人工设计场景)
E2E 测试 关键业务路径 低(需要人工定义验收标准)
性能测试 核心接口 中(AI 生成脚本,人工设定指标)