# 架构基线与 Common 层开发指引(Config/Core/Common) 适用范围:本项目已定版的三层架构(config/core/common),以及与 Java/Spring Boot 与 PHP/ThinkPHP 的对标关系与实践规则。目标:在不自创业务的前提下,指导 AI 基于真实 PHP 代码与数据库结构高一致地开发 common 层模块。 --- ## 1. 三层职责与使用方式 ### 1.1 Config 层(配置中心与环境治理) - 职责 - 环境与配置集中管理(env.* 与模块化配置) - 外部服务与框架能力的参数化(DB、Redis、JWT、队列等) - 使用规则 - 严禁编写业务逻辑,仅做“配置与适配” - 新增配置项:优先读取 env,统一通过 ConfigService 暴露 - 敏感配置不可写死;可按需对接密钥服务 - 参考位置 - 项目:wwjcloud/src/config - 环境文件:wwjcloud/env.* ### 1.2 Core 层(基础能力与横切关注) - 职责 - 全局管道/拦截器/过滤器/守卫基线 - 观测与日志、链路追踪(X-Trace-Id)、统一响应/异常 - 限流、CORS、Swagger 文档、调度与事件 - 使用规则 - 仅提供通用规则与“可复用能力”,不承载具体业务 - 全局基线已启用: - 参数校验:Global ValidationPipe - 统一响应:ResponseInterceptor(含 traceId) - 统一异常:HttpExceptionFilter(含 traceId) - 链路追踪:TracingInterceptor + X-Trace-Id 贯通 - 速率限制:ThrottlerGuard(按需配置) - CORS:app.enableCors() - 文档:Swagger(/adminapi 与 /api 分文档) - 参考位置 - 全局注册:wwjcloud/src/app.module.ts - 启动入口:wwjcloud/src/main.ts - Swagger 拆分:wwjcloud/src/config/modules/swagger/swaggerService.ts - Tracing/响应/异常:wwjcloud/src/core/**/* ### 1.3 Common 层(业务域模块化实现) - 职责 - 面向具体业务域(如 user/order/payment) - 内部完整分层:Controller → Service → Repository/Entity → DTO - 与 PHP 项目代码与数据库 100% 一致 - 使用规则 - 文件结构示例(以 user 为例): - src/common/user/ - user.module.ts(模块) - controllers/(管理端/前台可分 adminapi/ 与 api/) - services/ - entity/ - dto/ - guards/(可选) - 管理端路由前缀:/adminapi;前台:/api - Controller 只做:路由与 DTO 校验,禁止写业务 - Service 编排业务流程(必要时开启应用层事务) - Repository/Entity 与数据库字段 100% 对齐(禁止新增字段) - DTO/验证规则与 PHP 验证器一致 --- ## 2. 三框架对标对照(轻量/功能/性能) ### 2.1 总览对比 | 维度 | Java / Spring Boot | NestJS(本项目基线) | PHP / ThinkPHP | |---|---|---|---| | 轻量/启动 | 中等偏重、启动慢但稳定 | 轻量、启动快、按需模块 | 最轻、FPM 请求模型 | | 功能完备度 | 企业级最全(安全/事务/监控) | Web/微服务常用能力齐全 | Web 基础能力齐全 | | 性能取向 | 高吞吐、高并发、CPU 密集强 | 低延迟 I/O 强、BFF/聚合强 | 请求短、实现快 | | 并发模型 | 线程池 | 事件循环 + 异步 I/O | 多进程/请求 | | 可观测性 | Actuator/Micrometer | 健康/日志/Tracing 已落地 | 需组合/扩展 | | 安全基线 | Spring Security 完备 | 守卫/装饰器灵活 | 中间件/验证器为主 | ### 2.2 分层对比(config/core/common) | 能力项 | Spring Boot | NestJS(本项目) | ThinkPHP | |---|---|---|---| | Config | profiles + 强类型绑定 | env + ConfigModule(已启用) | env + config/*.php | | Core | Validation/Advice/Actuator | ValidationPipe/Filter/Interceptor/Throttler/CORS/Swagger(已启用) | Validate/中间件 | | Common | 分包+组件化 | 业务域模块自治(强约束对齐 PHP/DB) | app/{模块} | ### 2.3 性能视角(工程实践) | 场景 | Spring Boot | NestJS | ThinkPHP | |---|---|---|---| | API 聚合/BFF | 可做,线程开销更高 | 强项 | 适合后台接口 | | CPU 密集 | 强项 | 建议 offload 至 worker/微服务 | 不推荐 | | I/O 密集 | 稳定 | 强项 | 常规 | | 冷启动/弹性 | 相对慢 | 快 | 快 | --- ## 3. AI 开发 Common 层的使用方法(强约束版) > 目标:严格遵循 PHP 源码与数据库结构,使用 NestJS 特性实现相同业务语义;禁止自创和假设。 ### 3.1 约束来源(必须核对) - 数据库表结构:/sql/wwjcloud.sql(唯一权威) - PHP 控制器:/niucloud-php/niucloud/app/adminapi/controller/ - PHP 服务层:/niucloud-php/niucloud/app/service/ - PHP 模型:/niucloud-php/niucloud/app/model/ - PHP 验证器:/niucloud-php/niucloud/app/validate/ ### 3.2 开发流程(S1 → S10) - S1 需求分析体 - 定位对应的 PHP 控制器/服务/验证器/模型与数据库表 - 输出:模块边界、路由表(/adminapi 与 /api)、DTO 字段清单、实体字段清单 - S2 架构治理体 - 校验目录与依赖:common/{module}/ 按 Controller→Service→Entity→DTO 组织 - 确保依赖方向:App(Controller) → Service → Infra/Repository → Entity - S3 基建接入体 - 若涉及 Redis/队列/事务:按 core 规范接入(事务仅在应用层开启,共享 EntityManager) - S4 开发执行体 - Controller:只做路由/DTO 校验;响应交给全局拦截器统一处理 - Service:编排业务,与 PHP 服务层一致;必要时开启事务(禁止在 Core 开启) - Entity/Repository:字段与 /sql/wwjcloud.sql 100% 对齐(禁止新增字段) - 接入守卫:管理端统一 JwtAuthGuard + RolesGuard(或 AdminCheckTokenGuard) - S5 安全基线体(开发阶段) - 检查:site_id 隔离、越权、敏感字段输出、/adminapi 守卫 - S6 质量门禁体 - ESLint/TS 0 报错;覆盖率与 e2e 关键路径通过 - S7 规范审计体 - 命名/路由/守卫/事务/事件/队列 与 PHP/DB 对齐 - S5 安全基线体(提测前) - 重点接口越权与敏感输出复检 - S9 性能优化体 - 建议缓存、批处理、异步化,识别 N+1 与大对象 - S10 命名规范体 - 文件/类/方法/变量命名符合既定规范 - S8 上线管控体 - 变更说明、部署步骤、灰度与回滚预案 ### 3.3 模块落地清单(逐项核对) - 路由前缀:管理端 /adminapi;前台 /api(与 PHP 对齐) - 守卫:管理端控制器默认 JwtAuthGuard + RolesGuard(或 AdminCheckTokenGuard) - DTO:字段与 PHP 验证器一致;使用 class-validator + ValidationPipe - 实体:字段/类型/索引与 wwjcloud.sql 100% 一致;禁止新增字段 - 服务:方法名与 PHP 服务层一致;流程一致;必要时开启事务(应用层) - 统一响应:无需手工封装,交由 ResponseInterceptor;traceId 自动注入 - 异常处理:只抛出 HttpException/自定义异常;由 HttpExceptionFilter 统一处理 - 日志与链路:无需重复生成 traceId;使用 request.traceId(已在 Core 透传) - 文档:自动生成 Swagger,按 /adminapi 与 /api 拆分 ### 3.4 命名与目录规范(强规则) - 目录名:camelCase;文件名:camelCase.ts - 类名:PascalCase;接口名:IPascalCase;DTO:PascalCase + Dto - API 命名:camelCase;HTTP 方法规范化 - 数据库命名:snake_case(表/字段/索引/外键) - PHP 业务命名优先(在不违反 Nest 规范前提下) ### 3.5 事务/队列/事件(基线约束) - 事务:仅在 Application(Service 层)开启;多仓储共享同一 EntityManager;Core 不直接操作事务对象 - 队列:仅入队关键 ID,处理器放在 Infrastructure;按队列名分域 - 事件:统一 DomainEventService,事件名 domain.aggregate.action;默认 DB Outbox,可切 Kafka - Redis:短缓存/限流/幂等(SETNX+TTL)按需接入 ### 3.6 提交与验收 - PR 必须通过:构建、单测/集成/e2e - 审计项:字段/命名/路由/守卫/事务/队列/事件 与 PHP/DB 对齐 - 命名规范:严格执行大厂标准,提交命名检查报告 --- ## 4. 实操模板(创建首个 common 模块时) - 选定 PHP 源:定位对应 controller/service/validate/model 与 wwjcloud.sql 表 - 创建目录:src/common/{module}/(module 使用业务域名,camelCase) - 落地文件: - {module}.module.ts - controllers/{module}Controller.ts(必要时 adminapi/ 与 api/ 分目录) - services/{module}.service.ts - entity/{Entity}.entity.ts(名称与 PHP 模型一致的业务语义) - dto/{Operation}{Entity}Dto.ts(如 CreateUserDto) - 接入守卫:管理端默认接入鉴权与角色守卫 - 编写测试:单测/集成/e2e 涵盖关键路径(校验/守卫/事务) - 运行验收:确保全局拦截器/过滤器与 traceId 链路正常 --- ## 5. 关键基线位置(便于检索) - 全局模块注册:src/app.module.ts - 启动入口:src/main.ts(CORS/Swagger) - Swagger 拆分:src/config/modules/swagger/swaggerService.ts - 链路追踪:src/core/tracing/tracingInterceptor.ts - 统一响应:src/core/http/interceptors/responseInterceptor.ts - 统一异常:src/core/http/filters/httpExceptionFilter.ts - HTTP 日志:src/core/interceptors/httpLoggingInterceptor.ts - 安全守卫(示例):src/core/security/guards/adminCheckToken.guard.ts --- 结论: - Config/Core 已定版、与 Spring Boot/ThinkPHP 对标的核心能力就绪,traceId 与统一响应/异常/限流/CORS/Swagger 等基线已贯通。 - 按本文档清单可直接开始 common 层业务模块开发,严格以 PHP 源码与 wwjcloud.sql 为唯一权威对齐实现。