fischerX/docs/architecture/design-decisions/0003-nestjs-backend.md

1.7 KiB

ADR-0003: NestJS 后端框架

状态 接受
创建日期 2026-05-25
作者 技术团队

上下文

我们需要选择一个后端框架来构建 API 服务。我们的需求包括:

  • 企业级架构支持
  • TypeScript 优先
  • 模块化设计
  • 良好的可测试性
  • 丰富的生态系统

决策

我们决定使用 NestJS 11+ 作为后端框架,配合:

  • Prisma: ORM 和数据库工具
  • PostgreSQL: 主数据库
  • Redis: 缓存和会话存储
  • Swagger: API 文档

备选方案

方案 1: Express

优点:

  • 简单灵活
  • 最大的社区
  • 成熟稳定

缺点:

  • 缺少架构规范
  • 需要自行组织代码结构
  • 缺少企业级特性
  • TypeScript 支持有限

方案 2: Fastify

优点:

  • 高性能
  • 现代化设计
  • TypeScript 支持好

缺点:

  • 生态不如 Express
  • 企业级特性较少
  • 社区相对较小

方案 3: Spring Boot (Java)

优点:

  • 企业级成熟度
  • 丰富的生态
  • 强大的事务管理

缺点:

  • 团队学习成本高(当前是 TypeScript 团队)
  • 开发效率较低
  • 部署复杂

后果

正面影响

  1. 架构规范: 清晰的模块化架构
  2. 依赖注入: 便于测试和维护
  3. 装饰器模式: 声明式编程
  4. TypeScript 优先: 完整的类型安全
  5. 丰富模块: 认证、数据库、WebSocket 等
  6. 测试友好: 依赖注入便于单元测试

负面影响

  1. 学习曲线: NestJS 概念较多
  2. 文件结构: 相对较多的样板代码
  3. 性能: 相比 Fastify 有轻微开销(但通常可接受)

相关链接