Skip to content

项目结构

本文面向需要接手、排查或扩展 art-design-pro-server 的后端研发人员。目标是帮助你在后端工程中快速定位文件,避免只停留在 modulesconfigscripts 等目录名称层面。

先看整体结构

下面这棵目录树,重点保留了和日常开发、联调、部署最相关的部分。

text
├── src
│   ├── main.ts                         # 应用启动入口,注册全局前缀、Swagger、拦截器、过滤器
│   ├── app.module.ts                   # 根模块,装配所有业务模块和全局基础设施
│   ├── bootstrap
│   │   └── configure-cors.ts           # CORS 配置逻辑
│   ├── common                          # 公共层
│   │   ├── constants
│   │   │   └── pagination.constants.ts # 分页常量
│   │   ├── decorators
│   │   │   ├── skip-transform.decorator.ts
│   │   │   └── success-message.decorator.ts
│   │   ├── dto
│   │   │   ├── pagination-query.dto.ts # 通用分页查询 DTO
│   │   │   ├── time-range-query.dto.ts # 时间范围查询 DTO
│   │   │   └── ...
│   │   ├── middleware
│   │   │   └── request-id.middleware.ts # 请求 ID 中间件
│   │   ├── types
│   │   │   ├── api-response.interface.ts
│   │   │   ├── authenticated-user.interface.ts
│   │   │   └── ...
│   │   └── utils
│   │       ├── pagination.utils.ts     # 分页工具
│   │       ├── query-parse.utils.ts    # 查询参数解析
│   │       └── request-user.utils.ts   # 从请求中提取用户信息
│   ├── config                          # 配置层
│   │   ├── modules
│   │   │   ├── app.config.ts           # 应用级配置
│   │   │   ├── env.config.ts           # 环境变量加载与校验
│   │   │   ├── logs.config.ts          # 日志配置
│   │   │   ├── monitor.config.ts       # 监控相关配置
│   │   │   ├── system.config.ts        # 系统配置
│   │   │   └── throttle.config.ts      # 限流配置
│   │   └── index.ts                    # 配置导出入口
│   ├── enum
│   │   └── config.enum.ts              # 配置枚举
│   ├── filters
│   │   ├── all-exception.filter.ts     # 全局异常过滤器
│   │   └── http-exception.filter.ts    # HTTP 异常过滤器
│   ├── guards
│   │   ├── admin.guard.ts              # 管理员守卫
│   │   └── jwt.guard.ts                # JWT 守卫
│   ├── interceptors
│   │   └── transform.interceptor.ts    # 统一响应拦截器
│   ├── modules                         # 业务模块
│   │   ├── auth                        # 认证模块
│   │   │   ├── dto
│   │   │   │   ├── refresh-token.dto.ts
│   │   │   │   └── signin-user.dto.ts
│   │   │   ├── repositories
│   │   │   │   └── user-session.repository.ts
│   │   │   ├── auth.controller.ts      # 登录、刷新、登出、会话管理
│   │   │   ├── auth.module.ts
│   │   │   ├── auth.service.ts
│   │   │   └── jwt.strategy.ts
│   │   ├── user                        # 用户模块
│   │   │   ├── dto
│   │   │   │   ├── create-user.dto.ts
│   │   │   │   ├── update-user.dto.ts
│   │   │   │   ├── profile.dto.ts
│   │   │   │   └── ...
│   │   │   ├── repositories
│   │   │   │   └── user.repository.ts
│   │   │   ├── user.controller.ts
│   │   │   ├── user.module.ts
│   │   │   └── user.service.ts
│   │   ├── roles                       # 角色模块
│   │   │   ├── dto
│   │   │   ├── repositories
│   │   │   ├── roles.controller.ts
│   │   │   ├── roles.module.ts
│   │   │   └── roles.service.ts
│   │   ├── departments                 # 部门模块
│   │   ├── posts                       # 岗位模块
│   │   ├── menus                       # 菜单权限模块
│   │   │   ├── data                    # 菜单预置数据
│   │   │   ├── dto
│   │   │   ├── menu.controller.ts
│   │   │   ├── menu.module.ts
│   │   │   ├── menu.service.ts
│   │   │   └── menu.types.ts
│   │   ├── dicts                       # 字典模块
│   │   ├── site-settings               # 站点配置模块
│   │   ├── system-params               # 系统参数模块
│   │   ├── api-permissions             # API 权限模块
│   │   │   ├── decorators              # API 权限装饰器
│   │   │   ├── api-permissions.constants.ts
│   │   │   ├── api-permissions.controller.ts
│   │   │   ├── api-permissions.module.ts
│   │   │   ├── api-permissions.seed.ts
│   │   │   └── api-permissions.service.ts
│   │   ├── data-permissions            # 数据权限模块
│   │   │   ├── data-permissions.constants.ts
│   │   │   ├── data-permissions.module.ts
│   │   │   └── data-permissions.service.ts
│   │   ├── crypto                      # 接口签名与加密模块
│   │   │   ├── api-security.middleware.ts
│   │   │   ├── api-security.service.ts
│   │   │   ├── api-security.utils.ts
│   │   │   ├── crypto.controller.ts
│   │   │   ├── crypto.module.ts
│   │   │   └── crypto.service.ts
│   │   ├── logs                        # 日志模块
│   │   │   ├── decorators              # 操作日志装饰器
│   │   │   ├── dto
│   │   │   ├── interceptors
│   │   │   ├── logs.controller.ts
│   │   │   ├── logs.module.ts
│   │   │   ├── logs.service.ts
│   │   │   └── logs.utils.ts
│   │   ├── monitor                     # 监控模块
│   │   │   ├── dto
│   │   │   ├── services
│   │   │   ├── monitor.controller.ts
│   │   │   ├── monitor.module.ts
│   │   │   └── monitor.service.ts
│   │   ├── health                      # 健康检查模块
│   │   │   ├── indicators
│   │   │   ├── health.controller.ts
│   │   │   └── health.module.ts
│   │   ├── notifications               # 通知模块
│   │   │   ├── dto
│   │   │   ├── notifications.controller.ts
│   │   │   ├── notifications.module.ts
│   │   │   ├── notifications.service.ts
│   │   │   └── notifications.realtime.service.ts
│   │   ├── feedback                    # 反馈模块
│   │   ├── files                       # 文件中心模块
│   │   │   ├── dto
│   │   │   │   ├── create-upload-ticket.dto.ts
│   │   │   │   ├── complete-upload.dto.ts
│   │   │   │   ├── query-files.dto.ts
│   │   │   │   └── ...
│   │   │   ├── file-folders.controller.ts
│   │   │   ├── files.controller.ts
│   │   │   ├── files.module.ts
│   │   │   ├── files.service.ts
│   │   │   └── files.storage.ts
│   │   ├── content                     # 内容管理模块
│   │   │   ├── dto
│   │   │   ├── content.controller.ts
│   │   │   ├── content-category.controller.ts
│   │   │   ├── content-tag.controller.ts
│   │   │   ├── content.module.ts
│   │   │   ├── content.service.ts
│   │   │   ├── content-category.service.ts
│   │   │   └── content-tag.service.ts
│   │   ├── mall                        # 商城模块
│   │   │   ├── dto
│   │   │   ├── orders.controller.ts
│   │   │   ├── orders.service.ts
│   │   │   ├── product-categories.controller.ts
│   │   │   ├── product-categories.service.ts
│   │   │   ├── products.controller.ts
│   │   │   ├── products.service.ts
│   │   │   └── mall.module.ts
│   │   ├── workflow                    # 工作流模块
│   │   │   ├── dto
│   │   │   ├── interfaces
│   │   │   ├── services
│   │   │   │   ├── workflow-approval.engine.ts
│   │   │   │   ├── workflow-definition.service.ts
│   │   │   │   ├── workflow-instance.service.ts
│   │   │   │   ├── workflow-task.service.ts
│   │   │   │   └── workflow-validation.service.ts
│   │   │   ├── workflow-categories.controller.ts
│   │   │   ├── workflow-definitions.controller.ts
│   │   │   ├── workflow-instances.controller.ts
│   │   │   ├── workflow-tasks.controller.ts
│   │   │   ├── workflow.constants.ts
│   │   │   ├── workflow-category.service.ts
│   │   │   └── workflow.module.ts
│   │   ├── scheduled-tasks             # 定时任务模块
│   │   │   ├── dto
│   │   │   ├── scheduled-tasks.controller.ts
│   │   │   ├── scheduled-tasks.cron.ts
│   │   │   ├── scheduled-tasks.handlers.ts
│   │   │   ├── scheduled-tasks.module.ts
│   │   │   ├── scheduled-tasks.runner.service.ts
│   │   │   └── scheduled-tasks.service.ts
│   │   ├── security-audit              # 安全审计模块
│   │   └── ai-assistant                # AI 助手模块
│   ├── prisma
│   │   ├── prisma.module.ts            # Prisma 模块
│   │   └── prisma.service.ts           # Prisma 服务封装
│   └── scripts                         # 初始化和同步脚本
│       ├── load-env.ts                 # 脚本环境变量加载
│       ├── seed-default-data.ts        # 默认数据初始化
│       ├── seed-dev-data.ts            # 开发数据初始化
│       ├── seed-mall-demo-data.ts      # 商城演示数据初始化
│       ├── seed-workflow-data.ts       # 工作流数据初始化
│       ├── create-admin.ts             # 创建管理员
│       ├── init-scheduled-tasks.ts     # 初始化默认定时任务
│       ├── sync-role-permissions.ts    # 同步角色权限
│       ├── role-permission-presets.ts  # 角色权限预设
│       └── default-scheduled-tasks.ts  # 默认任务定义
├── prisma
│   ├── schema.prisma                   # Prisma 数据模型
│   └── migrations                      # 数据库迁移
├── test
│   └── jest-e2e.json                   # e2e 测试配置
├── package.json                        # 脚本、依赖、测试配置
└── docker-compose.yml                  # Docker Compose 部署模板

目录分层

第一层:启动与装配层

主要是:

  • main.ts
  • app.module.ts
  • bootstrap

这层负责把应用真正启动起来,并把所有全局基础设施接好。

第二层:公共基础设施层

主要是:

  • common
  • config
  • filters
  • guards
  • interceptors
  • prisma

这层决定:

  • 环境变量加载方式
  • 全局错误返回方式
  • JWT 校验方式
  • 数据库访问方式

第三层:业务模块层

主要是 modules

这是后端最重要的一层,也是你最常改的一层。项目里大多数功能都遵循同一种结构:

text
controller  接口入口
dto         参数定义与校验
service     业务逻辑
module      模块装配

复杂模块再继续拆:

  • repositories
  • services
  • interfaces
  • decorators

第四层:数据与初始化层

主要是:

  • 根目录 prisma
  • src/scripts

这层直接影响:

  • 数据库结构
  • 默认数据
  • 管理员账号
  • 角色权限同步
  • 定时任务初始化

建议阅读顺序

想理解一个接口

建议按这个顺序看:

  1. *.controller.ts
  2. 对应 dto
  3. *.service.ts
  4. repository 或 Prisma 调用

想理解一个模块

建议按这个顺序看:

  1. *.module.ts
  2. controller
  3. service
  4. dto / repository / 子 services

想理解整条登录链路

建议按这个顺序看:

  1. main.ts
  2. app.module.ts
  3. modules/auth/*
  4. guards/jwt.guard.ts
  5. modules/crypto/*
  6. 用户与会话相关 repository / service

常见需求对应的入口

需求优先查看
某个接口在哪里定义modules/*/*.controller.ts
参数校验失败dto/
某个业务规则在哪里*.service.tsservices/
启动配置未生效config + .env*
数据库结构不一致根目录 prisma
默认角色、管理员、任务数据异常src/scripts

扩展开发建议

适合新增文件的地方

  • 新模块:src/modules/<module>
  • 新脚本:src/scripts
  • 新公共 DTO / 工具:src/common
  • 新配置:src/config/modules

不建议随意堆逻辑的地方

  • main.ts
  • app.module.ts
  • 公共 guard / filter / interceptor

这些位置一旦混入过多业务逻辑,后续维护成本会迅速上升。

检查清单

接手后端项目后,建议确认:

  • 能根据接口定位到 controller、DTO、service 和数据访问实现。
  • 能区分启动装配层、公共基础设施层、业务模块层、数据与初始化层。
  • 新增模块不会把项目专属逻辑写入 main.tsapp.module.ts 或公共 guard/filter/interceptor。

根据 MIT 许可证发布