Files
record-app-next/document/ARCHITECTURE.md
2025-07-31 17:05:07 +08:00

7.0 KiB

录音应用架构文档

架构概述

本项目采用现代化的全栈架构,参考了多个优秀开源项目的设计模式:

  • Next.js 14 - 全栈 React 框架
  • 领域驱动设计 (DDD) - 业务逻辑分层
  • Clean Architecture - 清晰的依赖关系
  • 错误处理模式 - 参考 Stripe 的错误处理
  • API 设计 - 参考 GitHub 的 RESTful API 设计

项目结构

record-app/
├── src/
│   ├── app/                    # Next.js App Router
│   │   ├── api/               # API 路由层
│   │   │   ├── auth/          # 认证 API
│   │   │   ├── recordings/    # 录音管理 API
│   │   │   └── user/          # 用户管理 API
│   │   ├── dashboard/         # 主面板页面
│   │   ├── login/             # 登录页面
│   │   ├── register/          # 注册页面
│   │   ├── profile/           # 个人资料页面
│   │   ├── settings/          # 设置页面
│   │   └── layout.tsx         # 根布局
│   ├── components/            # React 组件层
│   │   ├── ui/               # 基础 UI 组件
│   │   │   ├── button.tsx    # 按钮组件
│   │   │   └── ...
│   │   ├── features/         # 功能组件
│   │   │   ├── audio-recorder/
│   │   │   ├── audio-player/
│   │   │   └── user-menu/
│   │   └── layout/           # 布局组件
│   ├── lib/                   # 核心库层
│   │   ├── config/           # 配置管理
│   │   ├── database.ts       # 数据库连接
│   │   ├── auth.ts           # 认证配置
│   │   ├── services/         # 业务服务层
│   │   │   ├── user.service.ts
│   │   │   └── recording.service.ts
│   │   ├── errors/           # 错误处理
│   │   │   └── app-error.ts
│   │   ├── middleware/       # 中间件
│   │   │   └── error-handler.ts
│   │   ├── utils/            # 工具函数
│   │   │   ├── api-response.ts
│   │   │   └── cn.ts
│   │   └── types/            # 类型定义
│   └── styles/               # 样式文件
├── prisma/                   # 数据库层
│   ├── schema.prisma         # 数据库模式
│   └── migrations/           # 数据库迁移
├── public/                   # 静态资源
│   └── recordings/           # 录音文件存储
└── docs/                     # 文档

架构层次

1. 表现层 (Presentation Layer)

  • 位置: src/app/src/components/
  • 职责: 用户界面和 API 路由
  • 特点:
    • 使用 Next.js App Router
    • 组件化设计
    • 响应式布局

2. 应用层 (Application Layer)

  • 位置: src/lib/services/
  • 职责: 业务逻辑和用例
  • 特点:
    • 领域服务模式
    • 事务管理
    • 业务规则验证

3. 领域层 (Domain Layer)

  • 位置: src/lib/ 核心业务逻辑
  • 职责: 核心业务规则
  • 特点:
    • 领域驱动设计
    • 实体和值对象
    • 领域事件

4. 基础设施层 (Infrastructure Layer)

  • 位置: prisma/ 和数据库相关
  • 职责: 数据持久化和外部服务
  • 特点:
    • 数据库抽象
    • 文件存储
    • 外部 API 集成

设计模式

1. 服务层模式 (Service Layer Pattern)

// 用户服务
export class UserService {
  static async createUser(data: CreateUserData): Promise<User>;
  static async getUserById(id: string): Promise<UserProfile | null>;
  static async updateUser(
    id: string,
    data: UpdateUserData
  ): Promise<UserProfile>;
}

2. 错误处理模式 (Error Handling Pattern)

// 自定义错误类
export class AppError extends Error {
  public readonly statusCode: number
  public readonly isOperational: boolean
  public readonly code?: string
}

// 具体错误类型
export class ValidationError extends AppError
export class AuthenticationError extends AppError
export class NotFoundError extends AppError

3. 响应处理模式 (Response Pattern)

// 统一 API 响应格式
export interface ApiResponse<T = any> {
  success: boolean;
  data?: T;
  error?: {
    message: string;
    code?: string;
    details?: any;
  };
  meta?: {
    timestamp: string;
    requestId?: string;
  };
}

4. 中间件模式 (Middleware Pattern)

// 错误处理中间件
export class ErrorHandler {
  static async handle<T>(
    handler: (req: NextRequest) => Promise<NextResponse<T>>,
    req: NextRequest
  ): Promise<NextResponse>;
}

数据流

1. API 请求流程

客户端请求 → API 路由 → 中间件 → 服务层 → 数据库 → 响应

2. 错误处理流程

错误发生 → 错误中间件 → 错误分类 → 统一响应格式 → 客户端

3. 认证流程

用户登录 → NextAuth → JWT Token → 会话管理 → 权限验证

配置管理

1. 环境配置

export const config = {
  app: { name: "录音应用", version: "1.0.0" },
  database: { url: process.env.DATABASE_URL! },
  auth: { secret: process.env.NEXTAUTH_SECRET! },
  upload: { maxFileSize: 50 * 1024 * 1024 },
  features: { audioVisualization: true },
};

2. 特性开关

  • 音频可视化
  • 录音暂停功能
  • 文件下载
  • 用户设置

安全考虑

1. 认证安全

  • JWT Token 管理
  • 密码哈希 (bcrypt)
  • 会话管理

2. 数据安全

  • 输入验证
  • SQL 注入防护 (Prisma)
  • 文件上传限制

3. API 安全

  • 速率限制
  • CORS 配置
  • 错误信息脱敏

性能优化

1. 数据库优化

  • 连接池管理
  • 查询优化
  • 索引策略

2. 前端优化

  • 组件懒加载
  • 图片优化
  • 缓存策略

3. API 优化

  • 响应缓存
  • 分页查询
  • 数据压缩

测试策略

1. 单元测试

  • 服务层测试
  • 工具函数测试
  • 组件测试

2. 集成测试

  • API 路由测试
  • 数据库集成测试
  • 认证流程测试

3. 端到端测试

  • 用户流程测试
  • 录音功能测试
  • 错误处理测试

部署架构

1. 开发环境

  • 本地数据库 (SQLite)
  • 热重载开发
  • 调试工具

2. 生产环境

  • 云数据库
  • CDN 加速
  • 监控告警

扩展性考虑

1. 水平扩展

  • 无状态设计
  • 数据库读写分离
  • 负载均衡

2. 功能扩展

  • 插件化架构
  • 模块化设计
  • API 版本管理

3. 技术栈扩展

  • 微服务拆分
  • 消息队列
  • 缓存层

最佳实践

1. 代码组织

  • 单一职责原则
  • 依赖注入
  • 接口隔离

2. 错误处理

  • 统一错误格式
  • 错误日志记录
  • 用户友好提示

3. 性能监控

  • 性能指标收集
  • 错误追踪
  • 用户行为分析

参考项目

  • Vercel/Next.js - 现代化全栈框架
  • Discord - 大规模应用架构
  • GitHub - API 设计和错误处理
  • Stripe - 支付系统架构
  • Shopify - 电商平台架构