Skip to Content

30d - 架构审查清单与反模式

本文是《AI Agent 实战手册》第 30 章第 4 节。 上一节:30c-系统设计文档AI生成 | 下一章:31a-AI辅助测试概览

概述

架构审查是软件工程中投入产出比最高的质量保障活动——在代码编写之前发现架构缺陷,修复成本仅为生产环境发现时的 1/100。2025-2026 年,AI 驱动的架构审查正在从”人工逐项检查”演进为”AI 自动扫描 + 人工确认”的协作模式:AI Agent 可以自动分析代码库的架构健康度、检测架构漂移、识别反模式,并生成结构化的审查报告。本节提供完整的 AI 辅助架构审查清单(按六大维度分类)、至少 12 个架构反模式目录(含症状、根因和解决方案)、架构漂移检测方法、AI 驱动的架构健康度评估框架、Prompt 模板库,以及防止架构退化的 Steering 规则模板。


1. AI 辅助架构审查的完整工作流

1.1 架构审查的演进

阶段时间方式效率覆盖度
传统人工审查2018-2023架构师手动检查清单、会议评审低(数天/次)依赖经验,容易遗漏
工具辅助审查2023-2024SonarQube + ArchUnit + 人工审查中(数小时/次)结构性问题覆盖好,设计问题仍依赖人工
AI 驱动审查2025-2026AI Agent 自动扫描 + 人工确认高(数分钟/次)结构 + 设计 + 运维全覆盖

1.2 端到端审查工作流

┌─────────────────────────────────────────────────────────────────────┐ │ AI 辅助架构审查端到端工作流 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ① 输入准备 ② AI 自动扫描 ③ 问题分类 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 代码仓库 │─────→│ 依赖分析 │──────→│ P0 阻断性 │ │ │ │ 设计文档 │ │ 模块边界 │ │ P1 重要 │ │ │ │ ADR 记录 │ │ 反模式检测│ │ P2 建议 │ │ │ │ Steering │ │ 漂移检测 │ │ P3 优化 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ ④ 人工确认 ⑤ 修复跟踪 ⑥ 持续监控 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 架构师审查│─────→│ 创建任务 │──────→│ CI/CD 集成│ │ │ │ 误报过滤 │ │ 优先排序 │ │ PR 级审查 │ │ │ │ 补充发现 │ │ 迭代修复 │ │ 定期扫描 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘

1.3 架构审查工具推荐

工具类型核心能力价格适用场景
SonarQube Architecture架构分析平台架构可视化、意图架构 vs 实际架构对比、架构约束定义(YAML)、循环依赖检测免费(Community)/ $180/年起(Developer)/ 企业定价持续架构治理,CI/CD 集成架构质量门
CodeScene行为代码分析架构热点分析、技术债务可视化、团队耦合分析、变更预测、PR 级架构审查$15/月起 / 企业定价架构健康度监控,识别高风险变更区域
ArchUnit架构测试框架Java/Kotlin 架构规则测试、分层约束、依赖检查、命名规范免费(开源)Java 项目架构约束自动化测试
Dependency Cruiser依赖分析JavaScript/TypeScript 依赖图生成、循环依赖检测、架构规则验证免费(开源)前端/Node.js 项目依赖治理
Claude CodeAI Agent全项目架构理解、反模式检测、架构审查报告生成、Steering 规则约束$20/月(Pro)/ $200/月(Max 20x)AI 驱动的深度架构审查
CodeRabbitAI 代码审查PR 级架构审查、架构图自动生成、一键修复建议、GitHub/GitLab 集成免费(开源)/ $12/月(Pro)PR 工作流中的自动架构审查
Sourcegraph Cody代码智能大型代码库架构理解、跨仓库搜索、架构依赖分析免费 / $9/月(Pro)/ 企业定价大型代码库的架构导航和理解
ArchimetricAI 架构文档代码仓库→架构文档、C4 模型自动生成、持续同步、漂移检测免费(Beta)/ 付费计划待定从代码逆向生成架构文档并持续同步
KiroAgentic IDESpec 驱动架构设计、Steering 规则约束、Hooks 自动验证架构一致性免费(50 Vibe)/ $19/月(Pro)结构化架构设计和持续约束

2. 架构审查清单(按六大维度分类)

架构审查清单是系统化审查的核心工具。以下清单按六大维度组织,每个维度包含具体的审查问题和优先级标注。AI 可以自动执行大部分检查项,人工聚焦于需要业务判断的高优先级问题。

2.1 维度一:功能完整性

目标:确保架构方案完整覆盖所有功能需求,无遗漏、无重叠。

#审查问题优先级AI 可自动化
F1所有核心功能是否都有对应的组件/服务承载?🔴 P0✅ 对比需求文档和架构图
F2是否存在功能职责重叠的组件?🟡 P1✅ 分析组件接口和数据流
F3跨组件的业务流程是否有完整的端到端设计?🔴 P0🔶 需要序列图验证
F4异步流程(消息队列、事件驱动)是否有完整的失败处理?🔴 P0✅ 检查死信队列和重试配置
F5第三方集成是否有降级方案?🟡 P1🔶 需要审查熔断器配置
F6数据一致性策略是否明确(强一致/最终一致)?🔴 P0❌ 需要业务判断
F7多租户隔离策略是否完整(数据/计算/网络)?🟡 P1✅ 检查隔离实现

2.2 维度二:非功能需求

目标:确保架构方案满足性能、可用性、可扩展性等质量属性要求。

#审查问题优先级AI 可自动化
N1性能瓶颈在哪里?是否有应对策略?🔴 P0🔶 可识别潜在瓶颈点
N2单点故障(SPOF)在哪里?如何消除?🔴 P0✅ 分析架构图中的单点
N3水平扩展策略是否明确?哪些组件是有状态的?🔴 P0✅ 检查状态管理方式
N4数据库读写分离/分片策略是否合理?🟡 P1🔶 需要结合数据量判断
N5缓存策略是否完整(缓存穿透/击穿/雪崩防护)?🟡 P1✅ 检查缓存配置
N6响应时间 SLA 是否有对应的架构保障?🔴 P0❌ 需要性能测试验证
N7并发控制策略是否明确(乐观锁/悲观锁/分布式锁)?🟡 P1✅ 检查锁实现
N8限流和熔断策略是否配置?🔴 P0✅ 检查中间件配置

2.3 维度三:可维护性

目标:确保架构方案易于理解、修改和扩展,技术债务可控。

#审查问题优先级AI 可自动化
M1组件边界是否清晰?耦合度是否可接受?🔴 P0✅ 分析依赖关系图
M2是否存在循环依赖?🔴 P0✅ 依赖分析工具检测
M3新功能添加的典型路径是什么?需要修改几个组件?🟡 P1🔶 需要场景分析
M4是否有”上帝模块”(职责过多的组件)?🟡 P1✅ 分析模块大小和依赖数
M5外部依赖是否通过适配器/接口隔离?🟡 P1✅ 检查依赖注入模式
M6配置是否外部化?是否支持不同环境?🟢 P2✅ 检查配置管理方式
M7API 版本管理策略是否明确?🟡 P1✅ 检查 API 路由和版本标记
M8代码和架构文档是否同步?🟢 P2✅ 对比文档和代码结构

2.4 维度四:运维就绪

目标:确保架构方案具备生产环境运维所需的可观测性、可部署性和可恢复性。

#审查问题优先级AI 可自动化
O1监控策略是否完整(指标/日志/链路追踪)?🔴 P0✅ 检查监控配置
O2告警规则是否定义?告警升级路径是否明确?🔴 P0✅ 检查告警配置
O3部署策略是否支持零停机(蓝绿/金丝雀/滚动)?🟡 P1✅ 检查部署配置
O4回滚方案是否可行?回滚时间是否可接受?🔴 P0🔶 需要验证回滚流程
O5灾难恢复方案是否明确(RTO/RPO)?🟡 P1❌ 需要业务判断
O6数据备份策略是否完整?恢复是否经过测试?🟡 P1✅ 检查备份配置
O7日志是否结构化?是否包含足够的排查信息?🟡 P1✅ 检查日志格式和级别
O8健康检查端点是否实现?🔴 P0✅ 检查 /health 端点
O9配置变更是否可以不重启服务生效?🟢 P2✅ 检查配置热加载

2.5 维度五:成本效益

目标:确保架构方案的成本合理,避免过度设计和资源浪费。

#审查问题优先级AI 可自动化
C1基础设施成本估算是否合理?是否有预算超支风险?🔴 P0🔶 可估算云资源成本
C2是否存在过度设计(当前规模不需要的复杂度)?🔴 P0🔶 对比需求规模和架构复杂度
C3成本随规模增长的曲线是否可预测?🟡 P1🔶 可建模成本曲线
C4是否有成本优化空间(预留实例、Spot 实例、Serverless)?🟡 P1✅ 分析资源使用模式
C5第三方服务的定价模型是否可持续?是否有替代方案?🟡 P1✅ 对比定价方案
C6开发和运维的人力成本是否在团队承受范围内?🔴 P0❌ 需要团队评估
C7技术债务的”利息”是否在可控范围内?🟡 P1🔶 可分析代码复杂度趋势

2.6 维度六:安全性

目标:确保架构方案具备完整的安全防护,满足合规要求。

#审查问题优先级AI 可自动化
S1认证方案是否安全(JWT 签名算法、Token 过期策略)?🔴 P0✅ 检查认证配置
S2授权模型是否遵循最小权限原则?🔴 P0✅ 分析权限配置
S3数据传输是否加密(TLS 1.3)?🔴 P0✅ 检查 TLS 配置
S4敏感数据是否静态加密?密钥管理方案是否安全?🔴 P0✅ 检查加密配置
S5输入验证是否在所有入口点实施?🔴 P0✅ 检查验证中间件
S6SQL 注入/XSS/CSRF 防护是否到位?🔴 P0✅ 安全扫描工具检测
S7密钥和凭证是否通过安全方式管理(非硬编码)?🔴 P0✅ 扫描代码中的密钥
S8网络隔离是否合理(公有/私有子网、安全组)?🟡 P1✅ 检查网络配置
S9审计日志是否记录关键操作?🟡 P1✅ 检查审计日志配置
S10合规要求(GDPR/SOC 2/HIPAA)是否满足?🔴 P0🔶 可检查部分合规项

2.7 AI 自动化架构审查 Prompt 模板

一键执行全维度架构审查:

你是一位拥有 15 年经验的软件架构师,擅长架构审查和质量评估。 请对以下系统进行全面的架构审查。 ## 系统信息 - 系统名称:[名称] - 技术栈:[语言/框架/数据库/云平台] - 团队规模:[人数] - 预期规模:[用户量/数据量/QPS] ## 架构描述 [粘贴架构文档、C4 图、或目录结构] ## 审查要求 请按以下六大维度进行审查,每个维度给出 1-5 分评分: ### 1. 功能完整性(所有功能是否有组件承载?) ### 2. 非功能需求(性能/可用性/扩展性保障?) ### 3. 可维护性(模块边界/耦合度/扩展性?) ### 4. 运维就绪(监控/部署/恢复方案?) ### 5. 成本效益(是否过度设计?成本可控?) ### 6. 安全性(认证/授权/加密/合规?) ## 输出格式 1. **评分卡**:六维度雷达图数据(每个维度 1-5 分) 2. **发现清单**:按优先级(P0/P1/P2)列出所有发现 3. **Top 5 改进建议**:最重要的 5 个改进建议 4. **反模式检测**:识别到的架构反模式 5. **架构漂移风险**:当前架构与设计意图的偏差

3. 架构反模式目录

架构反模式是在实践中反复出现的、看似合理但实际有害的架构决策模式。AI 辅助开发时代,某些反模式变得更加常见——AI 倾向于推荐”教科书式”的复杂方案,而忽略项目的实际约束。以下目录覆盖 12 个最常见的架构反模式,每个反模式包含描述、症状、根因、解决方案和 AI 审查 Prompt。

3.1 反模式 1:过度工程(Over-engineering)

别名:镀金(Gold Plating)、宇航员架构(Architecture Astronaut)

描述:为当前不需要的需求设计过于复杂的架构方案。典型表现是 3 人团队使用微服务 + Kafka + Redis + Elasticsearch + Kubernetes 的”全家桶”架构来构建一个 MVP 产品。

症状

  • 架构图中的组件数量远超团队人数的 2 倍
  • 存在大量”以防万一”的抽象层和中间件
  • 开发速度明显低于预期,大量时间花在基础设施搭建上
  • 团队成员无法完整理解整个系统架构
  • 运维复杂度远超业务复杂度

根因

  • AI 倾向于推荐”最佳实践”的复杂方案,忽略项目规模
  • 架构师追求技术完美而非业务价值
  • 对未来需求的过度预测(YAGNI 违反)
  • 简历驱动开发(Resume-Driven Development)

解决方案

  • 遵循 YAGNI 原则:只为当前确定的需求设计
  • 使用”最简可行架构”(Minimum Viable Architecture)起步
  • 在 Prompt 中明确约束:“我们是 [N] 人团队,请推荐最简可行的架构”
  • 设定架构复杂度预算:组件数 ≤ 团队人数 × 2

AI 审查 Prompt

请评估以下架构方案是否存在过度工程: ## 项目约束 - 团队规模:[人数] - 预期 DAU:[数量] - 上线时间:[月数] ## 架构方案 [粘贴架构描述] 请检查: 1. 组件数量是否与团队规模匹配? 2. 是否有当前不需要的中间件或服务? 3. 哪些组件可以合并或移除而不影响 MVP 功能? 4. 如果简化为最简架构,会失去什么?这些是否是当前必需的?

3.2 反模式 2:忽视运维成本(Ignoring Operational Costs)

别名:Day 2 盲区、只管建不管养

描述:架构设计只考虑”如何构建”(Day 1),忽略”如何运维”(Day 2)——监控、告警、日志、故障排查、备份恢复、安全更新等持续运营成本。AI 生成的架构方案尤其容易犯这个错误,因为训练数据中的架构文档通常只描述系统设计,很少涉及运维细节。

症状

  • 架构文档中没有监控和告警章节
  • 没有定义 SLA/SLO/SLI 指标
  • 故障发生时无法快速定位问题(缺少链路追踪)
  • 部署需要手动操作,没有自动化流程
  • 数据备份策略不明确或未经测试
  • 日志格式不统一,无法有效搜索

根因

  • AI 训练数据偏向”设计”而非”运维”
  • 开发团队缺乏运维经验
  • 项目时间压力下优先交付功能
  • “先上线再说”的心态

解决方案

  • 在架构设计 Prompt 中强制包含运维维度
  • 使用”Day 2 清单”作为架构审查的必检项
  • 将运维需求纳入 Spec 的验收标准
  • 采用 Steering 规则强制运维就绪检查

AI 审查 Prompt

请评估以下架构方案的运维就绪度: ## 架构方案 [粘贴架构描述] 请检查以下 Day 2 运维能力: 1. **可观测性**:是否有指标收集、日志聚合、链路追踪? 2. **告警**:是否定义了关键告警规则和升级路径? 3. **部署**:是否支持零停机部署和快速回滚? 4. **恢复**:RTO/RPO 是否明确?备份是否经过恢复测试? 5. **安全更新**:依赖漏洞修复流程是否明确? 6. **容量规划**:是否有自动扩缩容策略? 7. **成本监控**:是否有基础设施成本告警? 对每项给出"就绪/部分就绪/未就绪"评估,并提供改进建议。

3.3 反模式 3:技术偏见(Technology Bias)

别名:锤子效应(Golden Hammer)、简历驱动开发

描述:基于团队或 AI 的技术偏好而非项目需求选择技术栈。AI 的训练数据偏向热门技术(React、Node.js、PostgreSQL、Kubernetes),可能忽略更适合特定场景的小众但成熟的技术方案。

症状

  • 技术选型没有经过系统化的权衡分析
  • 选择的技术与项目需求不匹配(如用 MongoDB 存储强关系数据)
  • 团队对选择的技术缺乏经验,学习曲线陡峭
  • AI 推荐的技术栈总是相同的”热门组合”
  • 忽略了更简单、更成熟的替代方案

根因

  • AI 训练数据中热门技术的出现频率远高于小众技术
  • 开发者倾向于使用自己熟悉的技术
  • 技术社区的”炒作周期”影响决策
  • 缺乏系统化的技术评估框架

解决方案

  • 使用多维度权衡矩阵进行技术选型(详见 30b
  • 在 Prompt 中要求 AI 提供”非主流但可能更适合”的替代方案
  • 将”团队适配度”作为技术选型的高权重维度
  • 对关键技术选型进行 PoC 验证

AI 审查 Prompt

请审查以下技术选型是否存在技术偏见: ## 项目需求 [描述项目核心需求和约束] ## 当前技术选型 [列出选择的技术栈] 请检查: 1. 每个技术选择是否有明确的需求驱动? 2. 是否考虑过更简单/更成熟的替代方案? 3. 团队对选择的技术是否有足够经验? 4. 是否存在"用大炮打蚊子"的情况? 5. 请推荐至少 1 个可能更适合但不太热门的替代方案。

3.4 反模式 4:过早优化(Premature Optimization)

别名:万恶之源(Root of All Evil)

描述:在没有性能数据支撑的情况下,过早引入复杂的优化机制。典型表现是在 MVP 阶段就引入多级缓存、CQRS、事件溯源、读写分离等高级模式,而实际用户量只有几百人。正如 Donald Knuth 所说:“过早优化是万恶之源。”

症状

  • 系统中存在复杂的缓存层,但缓存命中率数据未知
  • 使用了 CQRS 或事件溯源,但读写比例未经测量
  • 数据库做了读写分离,但写入量远未达到单库瓶颈
  • 代码中有大量”性能优化”注释,但没有基准测试数据
  • 引入了消息队列处理”高并发”,但实际 QPS 只有个位数

根因

  • AI 倾向于推荐”生产级”的优化方案,不考虑当前规模
  • 对性能问题的恐惧驱动(“万一流量暴增怎么办”)
  • 缺乏”先测量再优化”的工程文化
  • 混淆了”可扩展的架构”和”已优化的架构”

解决方案

  • 遵循”先让它工作,再让它正确,最后让它快”的原则
  • 在 Prompt 中明确当前规模:“当前 DAU 只有 [N],请不要引入不必要的优化”
  • 设定优化触发条件:只有当性能指标超过阈值时才引入优化
  • 使用架构演进路线图替代一步到位的优化

AI 审查 Prompt

请评估以下架构方案是否存在过早优化: ## 当前规模 - DAU:[数量] - 峰值 QPS:[数量] - 数据量:[大小] ## 架构方案 [粘贴架构描述] 请检查: 1. 哪些组件/模式在当前规模下是不必要的? 2. 缓存层是否有实际的性能需求支撑? 3. 消息队列是否有实际的异步处理需求? 4. 读写分离/分库分表是否有数据量支撑? 5. 建议移除哪些优化,改为在什么条件下再引入?

3.5 反模式 5:缺少故障模式分析(Missing Failure Mode Analysis)

别名:晴天架构(Fair-Weather Architecture)、只考虑正常路径

描述:架构设计只考虑”一切正常”的场景,缺少对网络分区、服务降级、数据不一致、级联故障等异常场景的设计。AI 生成的架构方案通常只描述”正常路径”(Happy Path),很少主动考虑故障场景。

症状

  • 架构文档中没有故障场景分析章节
  • 没有定义服务降级策略(Graceful Degradation)
  • 没有熔断器(Circuit Breaker)配置
  • 分布式事务没有补偿机制(Saga/补偿事务)
  • 没有考虑网络超时和重试策略
  • 没有混沌工程或故障注入测试

根因

  • AI 训练数据中的架构文档偏向”设计”而非”故障处理”
  • 开发者倾向于先实现功能,后处理异常
  • 故障场景需要丰富的生产经验才能预见
  • “不会出问题”的乐观偏见

解决方案

  • 在架构设计阶段强制进行故障模式与影响分析(FMEA)
  • 使用”如果 X 挂了会怎样”的思维实验审查每个组件
  • 在 Prompt 中要求 AI 分析故障场景
  • 引入混沌工程实践验证故障恢复能力

AI 审查 Prompt

请对以下架构方案进行故障模式分析(FMEA): ## 架构方案 [粘贴架构描述] 对每个关键组件,请分析: | 组件 | 故障模式 | 影响范围 | 检测方式 | 恢复策略 | 降级方案 | |------|---------|---------|---------|---------|---------| 特别关注: 1. 数据库不可用时,系统如何响应? 2. 第三方 API 超时时,用户体验如何? 3. 消息队列积压时,如何处理? 4. 缓存失效时,是否会导致数据库雪崩? 5. 网络分区时,数据一致性如何保证? 6. 单个服务 OOM 时,是否会级联影响其他服务?

3.6 反模式 6:迁移复杂度低估(Underestimating Migration Complexity)

别名:大爆炸迁移(Big Bang Migration)、低估遗留系统

描述:在推荐架构演进方案时,严重低估从现有架构迁移到目标架构的实际复杂度和风险。AI 特别容易犯这个错误——它可以轻松描述”目标架构”的美好蓝图,但对迁移过程中的数据迁移、双写一致性、流量切换、回滚方案等细节缺乏深入分析。

症状

  • 迁移计划只有”目标状态”,没有”过渡状态”
  • 没有数据迁移方案或数据迁移方案过于简化
  • 没有考虑迁移期间的双写/双读一致性问题
  • 迁移时间估算过于乐观(实际通常是估算的 3-5 倍)
  • 没有回滚方案或回滚方案不可行
  • 忽略了迁移对现有用户的影响

根因

  • AI 缺乏实际迁移经验,倾向于描述理想状态
  • 低估了遗留系统的复杂度和隐含业务规则
  • 忽略了”Strangler Fig”等渐进式迁移模式的实施细节
  • 对数据迁移的复杂度认识不足

解决方案

  • 要求 AI 提供分阶段的迁移计划(而非一步到位)
  • 每个迁移阶段必须包含回滚方案
  • 数据迁移必须有验证步骤和一致性检查
  • 使用 Strangler Fig 模式进行渐进式迁移
  • 迁移时间估算乘以 3 作为安全系数

AI 审查 Prompt

请评估以下架构迁移方案的可行性: ## 当前架构 [描述现有架构] ## 目标架构 [描述目标架构] ## 迁移计划 [粘贴迁移计划] 请检查: 1. 迁移是否分阶段?每个阶段是否可独立回滚? 2. 数据迁移方案是否完整?是否有一致性验证? 3. 迁移期间的双写/双读策略是否明确? 4. 流量切换策略是否支持渐进式(灰度)? 5. 迁移时间估算是否合理?(通常需要乘以 3-5 倍安全系数) 6. 对现有用户的影响是否评估?是否有沟通计划? 7. 最坏情况下的回滚方案是什么?回滚需要多长时间?

3.7 反模式 7:大泥球(Big Ball of Mud)

别名:意大利面架构(Spaghetti Architecture)

描述:系统缺乏清晰的架构边界,组件之间随意依赖,代码结构混乱。在 AI 辅助开发中,如果没有 Steering 规则约束,AI 生成的代码可能逐渐侵蚀模块边界,导致系统退化为大泥球。

症状

  • 任何修改都可能影响系统的多个不相关部分
  • 无法独立测试单个模块
  • 新成员需要数周才能理解系统结构
  • 依赖关系图呈现”网状”而非”分层”结构
  • 存在大量循环依赖

根因

  • 缺乏架构约束和边界定义
  • AI 生成代码时倾向于”最短路径”实现,忽略模块边界
  • 没有架构测试(如 ArchUnit)防止边界侵蚀
  • 技术债务长期积累未清理

解决方案

  • 定义明确的模块边界和依赖规则
  • 使用 Steering 规则约束 AI 遵守模块边界
  • 引入架构测试(ArchUnit / Dependency Cruiser)自动检测违规
  • 定期进行架构审查,及时修复边界侵蚀

3.8 反模式 8:分布式单体(Distributed Monolith)

别名:微服务地狱、最差的两个世界

描述:名义上是微服务架构,但服务之间高度耦合,必须同时部署、同时发布,失去了微服务的独立性优势,同时承受了分布式系统的所有复杂性(网络延迟、数据一致性、运维复杂度)。

症状

  • 修改一个服务需要同时修改和部署其他服务
  • 服务之间共享数据库
  • 服务之间存在同步调用链超过 3 层
  • 无法独立扩展单个服务
  • 一个服务故障导致整个系统不可用

根因

  • 服务边界划分不当(按技术层而非业务领域划分)
  • AI 生成的微服务方案缺乏 DDD 领域分析
  • 为了”微服务”而微服务,没有真正的独立性需求
  • 缺乏服务间契约测试

解决方案

  • 使用 DDD 限界上下文划分服务边界
  • 确保每个服务拥有自己的数据存储
  • 同步调用链不超过 3 层,优先使用异步通信
  • 引入契约测试(Pact / Spring Cloud Contract)验证服务独立性
  • 如果服务总是一起部署,考虑合并为模块化单体

3.9 反模式 9:供应商锁定(Vendor Lock-in)

别名:云平台绑架、单一供应商依赖

描述:架构深度依赖特定云平台或供应商的专有服务,导致迁移成本极高。AI 推荐的架构方案常常大量使用云平台专有服务(如 AWS Lambda + DynamoDB + SQS + API Gateway),虽然开发效率高,但迁移到其他平台几乎需要重写。

症状

  • 核心业务逻辑直接调用云平台专有 API
  • 没有抽象层隔离云平台依赖
  • 无法在本地环境完整运行系统
  • 云平台价格调整直接影响项目可行性
  • 无法评估迁移到其他平台的成本

根因

  • AI 倾向于推荐云平台的”全托管”方案(开发最快)
  • 短期效率优先于长期灵活性
  • 缺乏对供应商锁定风险的评估

解决方案

  • 核心业务逻辑与云平台服务之间使用适配器模式隔离
  • 评估每个云平台专有服务的”锁定程度”和”替代方案”
  • 对高锁定风险的服务,保留开源替代方案的可行性
  • 在 Prompt 中要求 AI 评估供应商锁定风险

3.10 反模式 10:缺少 API 版本管理(Missing API Versioning)

别名:破坏性变更、API 地狱

描述:API 设计没有版本管理策略,任何 API 变更都可能破坏现有客户端。在 AI 辅助开发中,AI 生成的 API 通常不会主动考虑版本管理,导致后期维护困难。

症状

  • API URL 中没有版本号(如 /api/users 而非 /api/v1/users
  • 没有 API 变更日志(Changelog)
  • 客户端频繁因 API 变更而崩溃
  • 无法同时支持新旧版本的客户端
  • API 文档与实际行为不一致

根因

  • AI 生成 API 时默认不考虑版本管理
  • MVP 阶段忽略了 API 契约的重要性
  • 缺乏 API 设计规范和审查流程

解决方案

  • 从第一个 API 开始就使用版本号(URL 路径或 Header)
  • 定义 API 变更策略(向后兼容/废弃周期/迁移指南)
  • 使用 OpenAPI/Swagger 规范定义 API 契约
  • 引入 API 契约测试防止破坏性变更
  • 在 Steering 规则中强制 API 版本管理

3.11 反模式 11:日志黑洞(Logging Black Hole)

别名:不可观测系统、盲飞架构

描述:系统缺乏有效的可观测性设计——日志格式不统一、缺少结构化日志、没有链路追踪、没有业务指标监控。当生产环境出现问题时,无法快速定位根因。

症状

  • 日志格式不统一(有的 JSON、有的纯文本、有的无时间戳)
  • 无法通过请求 ID 追踪一个请求的完整链路
  • 生产环境问题需要数小时才能定位
  • 没有业务指标仪表板(如订单量、支付成功率)
  • 日志量过大但有效信息过少

根因

  • AI 生成代码时通常只添加基本的 console.log
  • 可观测性被视为”运维问题”而非”架构问题”
  • 缺乏统一的日志和监控标准

解决方案

  • 在架构设计阶段定义可观测性标准(日志格式、指标命名、追踪规范)
  • 使用结构化日志(JSON 格式)并包含请求 ID、用户 ID、操作类型
  • 引入分布式链路追踪(OpenTelemetry)
  • 定义关键业务指标(KPI)并建立仪表板
  • 在 Steering 规则中强制日志和监控标准

3.12 反模式 12:配置硬编码(Hardcoded Configuration)

别名:环境耦合、配置地狱

描述:将环境相关的配置(数据库连接串、API 密钥、功能开关、超时时间)硬编码在代码中,导致不同环境需要修改代码才能部署。AI 生成的代码示例中经常包含硬编码的配置值。

症状

  • 代码中存在硬编码的 URL、端口、密钥
  • 切换环境(开发/测试/生产)需要修改代码
  • 功能开关需要重新部署才能生效
  • 密钥泄露风险高(密钥在代码仓库中)
  • 无法进行 A/B 测试或灰度发布

根因

  • AI 生成的代码示例通常使用硬编码值作为演示
  • 开发者直接复制 AI 生成的示例代码到生产环境
  • 缺乏配置管理规范

解决方案

  • 遵循 12-Factor App 的配置原则:通过环境变量注入配置
  • 使用配置管理服务(AWS Parameter Store / HashiCorp Vault / Doppler)
  • 在 Steering 规则中禁止硬编码配置值
  • AI 生成代码时要求使用环境变量占位符

3.13 反模式总览表

#反模式严重度AI 易犯度检测难度修复成本
1过度工程🔴 高🔴 高🟡 中🟡 中
2忽视运维成本🔴 高🔴 高🟡 中🔴 高
3技术偏见🟡 中🔴 高🔴 高🟡 中
4过早优化🟡 中🔴 高🟡 中🟡 中
5缺少故障模式分析🔴 高🔴 高🟡 中🔴 高
6迁移复杂度低估🔴 高🔴 高🔴 高🔴 高
7大泥球🔴 高🟡 中🟢 低🔴 高
8分布式单体🔴 高🟡 中🟡 中🔴 高
9供应商锁定🟡 中🟡 中🟡 中🔴 高
10缺少 API 版本管理🟡 中🔴 高🟢 低🟡 中
11日志黑洞🟡 中🔴 高🟢 低🟡 中
12配置硬编码🟡 中🔴 高🟢 低🟢 低

4. AI 驱动的架构健康度评估

4.1 架构健康度指标体系

架构健康度是对系统架构质量的综合量化评估。AI 可以通过分析代码库自动计算大部分指标,为架构审查提供数据支撑。

指标类别具体指标计算方式健康阈值工具支持
耦合度模块间依赖数(Afferent/Efferent Coupling)统计模块间的 import/依赖关系传入依赖 ≤ 10,传出依赖 ≤ 8SonarQube、Dependency Cruiser
内聚度模块内聚度(LCOM4)分析模块内部类/函数的关联性LCOM4 ≤ 2CodeScene、SonarQube
复杂度圈复杂度(Cyclomatic Complexity)分析代码路径分支数函数级 ≤ 10,模块级 ≤ 50ESLint、SonarQube
模块大小代码行数 / 文件数统计每个模块的规模单模块 ≤ 5000 行cloc、tokei
依赖深度最长依赖链长度分析依赖图的最长路径≤ 5 层Dependency Cruiser
循环依赖循环依赖数量检测依赖图中的环0 个SonarQube Architecture、Dependency Cruiser
API 一致性API 命名/参数/响应格式一致性分析 API 定义的规范符合度≥ 90% 一致Spectral、Claude Code
测试覆盖架构关键路径测试覆盖率分析核心模块的测试覆盖≥ 80%Jest、Vitest、Istanbul
技术债务债务比率(Debt Ratio)修复所有问题的估算时间 / 重写时间≤ 5%SonarQube
架构漂移实际依赖 vs 设计依赖的差异数对比架构图与实际代码依赖0 个偏差SonarQube Architecture、ArchUnit

4.2 架构健康度评估 Prompt 模板

全面架构健康度评估:

你是一位架构健康度评估专家。请对以下代码仓库进行架构健康度评估。 ## 仓库信息 - 语言:[TypeScript/Python/Go/Java] - 框架:[框架名称] - 目录结构: [粘贴 tree 命令输出] ## 评估维度(每个维度 1-5 分) ### 1. 模块化程度 - 模块边界是否清晰? - 模块间耦合度是否可接受? - 是否存在"上帝模块"? ### 2. 依赖健康度 - 是否存在循环依赖? - 依赖方向是否正确(高层不依赖低层实现)? - 外部依赖是否通过适配器隔离? ### 3. 代码组织 - 目录结构是否反映架构意图? - 命名是否一致且有意义? - 关注点分离是否到位? ### 4. 可测试性 - 核心逻辑是否可以独立测试? - 依赖注入是否广泛使用? - 测试覆盖率是否充足? ### 5. 可扩展性 - 新功能添加是否需要修改核心代码? - 是否有明确的扩展点? - 配置是否外部化? ### 6. 运维就绪度 - 日志是否结构化? - 健康检查是否实现? - 错误处理是否一致? ## 输出格式 1. **健康度评分卡**(六维度雷达图数据) 2. **Top 5 架构风险**(按严重度排序) 3. **改进路线图**(短期/中期/长期) 4. **Steering 规则建议**(防止进一步退化)

4.3 架构健康度趋势监控

架构健康度不是一次性评估,而是需要持续监控的指标。以下是建立架构健康度趋势监控的方法:

CI/CD 集成架构健康度检查:

# .github/workflows/architecture-health.yml name: Architecture Health Check on: push: branches: [main] schedule: - cron: '0 9 * * 1' # 每周一早上 9 点 jobs: health-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 检查循环依赖 run: | npx dependency-cruiser --config .dependency-cruiser.cjs src/ \ --output-type err - name: 检查模块边界 run: | npx dependency-cruiser --config .dependency-cruiser.cjs src/ \ --output-type archi \ --output-to reports/dependency-graph.svg - name: 计算复杂度指标 run: | npx eslint src/ --format json --output-file reports/complexity.json \ --rule '{"complexity": ["warn", 10]}' - name: 生成架构健康度报告 run: | echo "## 架构健康度报告 $(date)" > reports/health-report.md echo "" >> reports/health-report.md echo "### 循环依赖" >> reports/health-report.md npx dependency-cruiser --config .dependency-cruiser.cjs src/ \ --output-type text >> reports/health-report.md || true echo "" >> reports/health-report.md echo "### 复杂度警告" >> reports/health-report.md cat reports/complexity.json | jq '.[] | .messages[] | .message' \ >> reports/health-report.md || true - name: 上传报告 uses: actions/upload-artifact@v4 with: name: architecture-health-report path: reports/

5. 架构漂移检测方法

5.1 什么是架构漂移

架构漂移(Architecture Drift)是指实际代码实现逐渐偏离设计时的架构意图。在 AI 辅助开发中,架构漂移的风险更高——AI 生成的代码可能不了解团队的架构约定,逐渐侵蚀模块边界。

架构漂移的常见表现:

漂移类型描述示例
依赖漂移模块间出现了设计中不存在的依赖表现层直接访问数据库,绕过业务层
边界漂移模块边界被突破,内部实现被外部直接访问其他模块直接 import 某模块的内部工具函数
职责漂移组件承担了设计中未分配的职责API 网关中包含了业务逻辑
通信漂移组件间通信方式偏离设计设计为异步事件驱动,实际用了同步 HTTP 调用
数据漂移数据所有权或访问模式偏离设计多个服务直接访问同一个数据库表

5.2 AI 驱动的架构漂移检测

检测工作流:

┌─────────────────────────────────────────────────────────┐ │ AI 驱动的架构漂移检测工作流 │ ├─────────────────────────────────────────────────────────┤ │ │ │ ① 架构基线定义 ② 实际架构提取 │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ 设计文档 │ │ 代码依赖分析 │ │ │ │ C4 模型 │ │ import 图谱 │ │ │ │ ADR 记录 │ │ API 调用链 │ │ │ │ Steering 规则│ │ 数据访问模式 │ │ │ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ └───────┬───────────┘ │ │ ▼ │ │ ③ AI 对比分析 │ │ ┌──────────────────────────────────┐ │ │ │ · 设计依赖 vs 实际依赖 │ │ │ │ · 模块边界是否被突破 │ │ │ │ · API 契约是否变更 │ │ │ │ · 新增组件是否符合架构模式 │ │ │ └──────────────┬───────────────────┘ │ │ ▼ │ │ ④ 漂移报告 │ │ ┌──────────────────────────────────┐ │ │ │ · 漂移清单(按严重度排序) │ │ │ │ · 每个漂移的影响分析 │ │ │ │ · 修复建议和优先级 │ │ │ │ · Steering 规则更新建议 │ │ │ └──────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘

架构漂移检测 Prompt 模板:

请对比以下架构设计文档和实际代码结构,检测架构漂移: ## 设计文档中的架构意图 [粘贴架构设计文档或 C4 图] ## 实际代码结构 [粘贴 tree 命令输出或依赖分析结果] ## Steering 规则(架构约束) [粘贴 Steering 规则] 请检测以下类型的漂移: 1. **依赖漂移**:是否存在设计中不允许的模块间依赖? 2. **边界漂移**:是否有模块的内部实现被外部直接访问? 3. **职责漂移**:是否有组件承担了设计中未分配的职责? 4. **通信漂移**:组件间通信方式是否偏离设计? 5. **命名漂移**:代码中的命名是否与架构文档一致? ## 输出格式 | 漂移类型 | 位置 | 设计意图 | 实际情况 | 严重度 | 修复建议 | |---------|------|---------|---------|--------|---------|

5.3 SonarQube Architecture 架构漂移检测

2025 年底,Sonar 发布了 Architecture 功能(Beta),支持定义意图架构并自动检测实际代码与意图架构的偏差。这是目前最成熟的自动化架构漂移检测方案。

SonarQube Architecture 配置示例(YAML):

# sonar-architecture.yaml # 定义意图架构:分层架构 + 模块边界 perspectives: - name: "分层架构" groups: - name: "表现层" includes: - "src/controllers/**" - "src/routes/**" - "src/middleware/**" - name: "业务层" includes: - "src/services/**" - "src/domain/**" - name: "数据层" includes: - "src/repositories/**" - "src/models/**" - name: "基础设施层" includes: - "src/infrastructure/**" - "src/config/**" constraints: # 表现层只能依赖业务层 - from: "表现层" allow: - "业务层" deny: - "数据层" # 禁止表现层直接访问数据层 - "基础设施层" # 禁止表现层直接访问基础设施层 # 业务层可以依赖数据层,但不能依赖表现层 - from: "业务层" allow: - "数据层" deny: - "表现层" # 禁止业务层依赖表现层(反向依赖) # 数据层不能依赖业务层和表现层 - from: "数据层" deny: - "业务层" - "表现层"

5.4 Dependency Cruiser 架构规则配置

对于 JavaScript/TypeScript 项目,Dependency Cruiser 是最流行的依赖分析和架构规则工具:

// .dependency-cruiser.cjs /** @type {import('dependency-cruiser').IConfiguration} */ module.exports = { forbidden: [ // 禁止循环依赖 { name: 'no-circular', severity: 'error', comment: '禁止循环依赖,这会导致模块边界模糊', from: {}, to: { circular: true } }, // 禁止表现层直接访问数据层 { name: 'no-controller-to-repository', severity: 'error', comment: '控制器不能直接访问 Repository,必须通过 Service 层', from: { path: '^src/controllers/' }, to: { path: '^src/repositories/' } }, // 禁止业务层依赖表现层 { name: 'no-service-to-controller', severity: 'error', comment: '服务层不能依赖控制器层(反向依赖)', from: { path: '^src/services/' }, to: { path: '^src/controllers/' } }, // 禁止跨模块直接访问内部实现 { name: 'no-cross-module-internals', severity: 'warn', comment: '模块间只能通过公共接口(index.ts)通信', from: { path: '^src/modules/([^/]+)/' }, to: { path: '^src/modules/([^/]+)/', pathNot: [ '^src/modules/$1/', // 同模块内部允许 '^src/modules/[^/]+/index\\.ts$' // 其他模块的公共接口允许 ] } } ], options: { doNotFollow: { path: 'node_modules' }, tsPreCompilationDeps: true, tsConfig: { fileName: 'tsconfig.json' } } };

6. 架构审查 Prompt 模板库

6.1 PR 级架构审查 Prompt

在每个 Pull Request 中执行轻量级架构审查,防止架构漂移在代码合并时发生:

请对以下 PR 进行架构级审查(不是代码风格审查): ## PR 变更摘要 [粘贴 PR 描述或 git diff --stat 输出] ## 架构约束(Steering 规则) [粘贴项目的架构 Steering 规则] 请检查以下架构关注点: ### 1. 模块边界 - 变更是否跨越了模块边界? - 是否引入了新的跨模块依赖? - 新依赖是否符合架构约束? ### 2. 分层合规 - 是否存在跨层直接调用(如控制器直接访问数据库)? - 依赖方向是否正确? ### 3. API 契约 - 是否修改了公共 API?是否向后兼容? - 新 API 是否遵循项目的 API 设计规范? ### 4. 数据模型 - 是否修改了数据库 Schema?是否有迁移文件? - 数据模型变更是否影响其他模块? ### 5. 安全性 - 是否引入了新的外部依赖?是否有已知漏洞? - 是否有硬编码的密钥或配置? ## 输出格式 - 🔴 阻断性问题(必须修复才能合并) - 🟡 建议改进(建议修复但不阻断) - 🟢 信息提示(供参考)

6.2 季度架构审查 Prompt

每季度进行一次全面的架构健康度审查,评估架构演进方向:

请进行本季度的架构健康度审查。 ## 项目信息 - 项目名称:[名称] - 上次审查日期:[日期] - 本季度主要变更:[列出重大功能/架构变更] ## 审查范围 [粘贴当前代码库结构或架构图] ## 上次审查的遗留问题 [列出上次审查发现但未修复的问题] ## 请执行以下审查: ### 1. 架构漂移评估 - 当前代码结构是否仍然符合设计文档? - 是否有新的模块边界违规? - ADR 中的决策是否仍然有效? ### 2. 技术债务盘点 - 新增了哪些技术债务? - 上次识别的技术债务是否有改善? - 技术债务的"利息"是否在增长? ### 3. 架构演进评估 - 当前架构是否仍然满足业务需求? - 是否需要进行架构演进?触发条件是什么? - 下一步架构改进的优先级建议 ### 4. 安全态势评估 - 是否有新的安全风险? - 依赖漏洞是否及时修复? - 安全架构是否需要更新? ## 输出格式 1. **健康度评分卡**(与上次对比) 2. **新发现问题清单**(按优先级排序) 3. **遗留问题进展** 4. **下季度改进建议**(Top 3) 5. **Steering 规则更新建议**

6.3 反模式检测 Prompt

专门用于检测架构反模式的深度分析 Prompt:

请对以下系统进行架构反模式检测。 ## 系统信息 - 技术栈:[语言/框架/数据库] - 团队规模:[人数] - 系统年龄:[月/年] - 当前规模:[用户量/数据量] ## 代码结构 [粘贴目录结构或依赖分析结果] ## 架构描述 [粘贴架构文档或 C4 图] 请检测以下 12 个架构反模式: 1. **过度工程**:组件数量是否与需求规模匹配? 2. **忽视运维成本**:可观测性和运维自动化是否就绪? 3. **技术偏见**:技术选型是否有需求驱动? 4. **过早优化**:是否有当前规模不需要的优化机制? 5. **缺少故障模式分析**:故障场景是否有设计? 6. **迁移复杂度低估**:架构演进计划是否可行? 7. **大泥球**:模块边界是否清晰?依赖是否有序? 8. **分布式单体**:微服务是否真正独立? 9. **供应商锁定**:核心逻辑是否与云平台解耦? 10. **缺少 API 版本管理**:API 是否有版本策略? 11. **日志黑洞**:日志和监控是否有效? 12. **配置硬编码**:配置是否外部化? ## 输出格式 对每个反模式: - **检测结果**:存在 / 不存在 / 有风险 - **证据**:具体的代码位置或架构特征 - **严重度**:🔴 高 / 🟡 中 / 🟢 低 - **修复建议**:具体的改进措施 - **修复优先级**:P0 / P1 / P2

6.4 新项目架构审查 Prompt

在新项目启动时,对初始架构方案进行审查:

请对以下新项目的架构方案进行启动前审查。 ## 项目背景 - 项目类型:[SaaS/电商/内部工具/API 平台] - 团队规模:[人数] - 上线时间:[截止日期] - 预期规模:[用户量/数据量] - 预算:[月度基础设施预算] ## 架构方案 [粘贴架构设计文档] ## 审查重点 ### 1. 方案合理性 - 架构复杂度是否与项目规模匹配? - 技术选型是否与团队能力匹配? - 是否遵循了"最简可行架构"原则? ### 2. 风险识别 - Top 5 架构风险是什么? - 每个风险的缓解措施是否充分? - 是否有"致命假设"需要尽早验证? ### 3. 演进可行性 - 从 MVP 到成熟期的演进路径是否清晰? - 演进过程中的关键决策点是什么? - 是否为未来的架构变更预留了接缝? ### 4. 遗漏检查 - 是否遗漏了关键的非功能需求? - 安全设计是否完整? - 运维就绪度是否考虑? ## 输出格式 1. **总体评价**:通过 / 有条件通过 / 需要重大修改 2. **必须修改项**(阻断性问题) 3. **建议修改项**(改进建议) 4. **风险登记表** 5. **启动前检查清单**(确认所有前置条件满足)

7. Steering 规则模板(防止架构退化)

Steering 规则是 AI 编码助手的行为约束文件,可以有效防止 AI 生成的代码违反架构约束。以下提供多个场景的 Steering 规则模板。

7.1 通用架构约束 Steering 规则

# 架构约束 Steering 规则 ## 分层架构约束 - 控制器层(controllers/)只能调用服务层(services/),禁止直接访问数据层 - 服务层(services/)可以调用数据层(repositories/),禁止依赖控制器层 - 数据层(repositories/)不能依赖服务层和控制器层 - 工具函数(utils/)不能依赖任何业务层 ## 模块边界约束 - 模块间通过公共接口(index.ts)通信,禁止直接导入其他模块的内部文件 - 每个模块拥有独立的数据模型,禁止跨模块直接查询数据库表 - 新增跨模块依赖必须在 PR 描述中说明理由 ## 数据访问约束 - 所有数据库操作必须通过 ORM(Prisma/Drizzle),禁止原始 SQL(除非有性能优化的 ADR 支持) - 数据库迁移必须可回滚,禁止破坏性变更(如删除列)不提供回滚脚本 - 缓存操作必须通过统一的缓存服务,禁止直接调用 Redis 客户端 ## 配置管理约束 - 所有环境相关配置通过环境变量注入,禁止硬编码 - 密钥和凭证必须通过密钥管理服务,禁止出现在代码仓库中 - 功能开关通过配置服务管理,禁止硬编码 if/else 分支 ## API 设计约束 - 所有 API 必须包含版本号(/api/v1/...) - API 响应格式必须统一({ data, error, meta }) - 破坏性 API 变更必须创建新版本,旧版本保留至少 3 个月 ## 错误处理约束 - 所有异步操作必须有错误处理(try/catch 或 .catch()) - 错误响应必须包含错误码、错误消息和请求 ID - 禁止吞掉异常(catch 块中不能为空) ## 日志和监控约束 - 所有 API 请求必须记录结构化日志(JSON 格式) - 日志必须包含:请求 ID、用户 ID、操作类型、耗时、状态码 - 关键业务操作必须记录审计日志 - 新增服务必须实现 /health 健康检查端点

7.2 微服务架构 Steering 规则

# 微服务架构 Steering 规则 ## 服务边界 - 每个微服务对应一个限界上下文,不按技术层划分 - 服务数量不超过团队人数的 2 倍 - 如果两个服务总是一起部署,考虑合并为一个服务 ## 通信约束 - 同步调用链不超过 3 层 - 跨服务数据查询优先使用 CQRS 读模型,而非级联 API 调用 - 所有异步通信必须设计幂等性和重试策略 - 服务间通信必须有超时配置(默认 5 秒) - 必须配置熔断器(Circuit Breaker),防止级联故障 ## 数据管理 - 每个服务拥有自己的数据库 Schema 或数据库实例 - 禁止跨服务直接访问数据库 - 数据同步使用事件驱动,而非定时批量同步 - 分布式事务使用 Saga 模式,禁止两阶段提交(2PC) ## 部署约束 - 每个服务必须可以独立部署和回滚 - 服务间的 API 变更必须向后兼容 - 新版本部署必须支持金丝雀发布 ## 可观测性 - 每个服务必须暴露 Prometheus 指标端点 - 所有跨服务调用必须传播链路追踪上下文(Trace ID) - 每个服务必须有独立的日志流

7.3 模块化单体 Steering 规则

# 模块化单体架构 Steering 规则 ## 模块定义 - 每个业务领域对应一个模块目录(src/modules/{module-name}/) - 模块必须有公共接口文件(index.ts),只导出公共 API - 模块内部文件不能被其他模块直接导入 ## 模块间通信 - 模块间通过公共接口通信,禁止直接访问内部实现 - 模块间数据传递使用 DTO(Data Transfer Object),禁止传递内部实体 - 跨模块事件使用内部事件总线,为未来拆分预留接缝 ## 数据隔离 - 每个模块拥有独立的数据库 Schema(schema-per-module) - 禁止跨模块 JOIN 查询 - 共享数据通过事件同步或 API 调用获取 ## 未来拆分预留 - 模块间不共享内存状态 - 模块间通信可以替换为网络调用(接口设计兼容) - 每个模块的依赖可以独立管理

8. 团队架构审查协作模式

8.1 架构审查的角色分工

角色职责AI 辅助方式
架构负责人定义架构标准、审批重大架构变更、维护 ADRAI 生成 ADR 草稿、权衡分析报告
技术 Lead日常架构审查、PR 级架构检查、指导团队AI 自动 PR 审查、反模式检测
开发者遵守架构约束、提出架构改进建议AI Steering 规则约束、实时架构提示
运维工程师审查运维就绪度、部署架构、监控策略AI 生成运维清单、告警规则建议
安全工程师审查安全架构、合规性、威胁模型AI 安全扫描、合规检查

8.2 架构审查的频率和触发条件

审查类型频率触发条件参与者AI 辅助程度
PR 级审查每个 PR代码提交技术 Lead + AI🟢 高(自动化)
Sprint 审查每 2 周Sprint 结束团队 + 架构负责人🟡 中(报告生成)
季度审查每季度季度末全团队 + 管理层🟡 中(健康度评估)
重大变更审查按需新服务/新技术/架构重构架构委员会🟢 高(权衡分析)
事后审查按需生产事故相关团队🟡 中(根因分析)

8.3 架构审查会议模板

会前准备(AI 辅助生成):

请帮我准备架构审查会议材料: ## 审查范围 - 时间范围:[上次审查日期] 至今 - 主要变更:[列出重大变更] 请生成: 1. **架构变更摘要**(1 页,列出所有架构相关变更) 2. **健康度对比**(与上次审查的指标对比) 3. **新发现问题**(AI 自动检测的架构问题) 4. **讨论议题**(需要团队讨论的架构决策) 5. **决策模板**(会议中需要做的决策的 ADR 模板)

会议议程模板:

# 架构审查会议议程 ## 基本信息 - 日期:[日期] - 参与者:[名单] - 时长:60 分钟 ## 议程 ### 1. 回顾(10 分钟) - 上次审查的遗留问题进展 - 本周期的架构变更摘要 ### 2. 健康度报告(10 分钟) - AI 生成的架构健康度评分 - 关键指标趋势(耦合度、复杂度、技术债务) ### 3. 问题讨论(25 分钟) - AI 检测到的架构问题 - 团队提出的架构关注点 - 需要决策的架构问题 ### 4. 决策和行动项(10 分钟) - 记录架构决策(ADR) - 分配修复任务和优先级 - 更新 Steering 规则(如需要) ### 5. 下次审查计划(5 分钟) - 确认下次审查日期 - 确认重点关注领域

实战案例:电商平台架构审查全流程

案例背景

一个运行了 8 个月的 B2C 电商平台,团队从 3 人增长到 8 人,用户从 1000 DAU 增长到 2 万 DAU。技术栈为 TypeScript + Next.js + Fastify + PostgreSQL + Redis。团队感觉”代码越来越难改”,决定进行一次全面的架构审查。

步骤 1:AI 自动扫描

使用 Claude Code 执行架构扫描:

请对当前代码仓库进行全面的架构健康度扫描。 重点关注: 1. 模块边界是否清晰?是否有循环依赖? 2. 是否存在"上帝模块"(职责过多的模块)? 3. 数据访问模式是否规范?是否有跨层直接调用? 4. 错误处理是否一致? 5. 日志和监控是否完整? 6. 是否存在硬编码配置? 7. API 设计是否一致?

AI 扫描结果摘要:

## 架构健康度评分 | 维度 | 评分 | 说明 | |------|------|------| | 模块化程度 | 3/5 | 模块边界基本清晰,但存在 3 处循环依赖 | | 依赖健康度 | 2/5 | 发现 5 处跨层直接调用,2 个"上帝模块" | | 代码组织 | 4/5 | 目录结构合理,命名一致 | | 可测试性 | 3/5 | 核心逻辑可测试,但部分服务缺少依赖注入 | | 运维就绪度 | 2/5 | 缺少结构化日志,无链路追踪,健康检查不完整 | | 安全性 | 3/5 | 认证方案合理,但发现 2 处硬编码配置 | ## 发现的反模式 1. 🔴 **大泥球趋势**:order 模块直接导入 user 模块的内部实现 2. 🔴 **日志黑洞**:日志格式不统一,无请求 ID 追踪 3. 🟡 **过早优化**:引入了 Redis 缓存层,但缓存命中率未监控 4. 🟡 **配置硬编码**:2 处第三方 API 密钥硬编码在代码中 5. 🟡 **缺少 API 版本管理**:所有 API 无版本号

步骤 2:人工确认和优先级排序

架构师审查 AI 的扫描结果,确认发现的问题并排序:

优先级问题修复方案预估工时
🔴 P0硬编码密钥迁移到环境变量 + AWS Secrets Manager2 小时
🔴 P0日志黑洞引入 Pino 结构化日志 + 请求 ID 中间件1 天
🟡 P1模块边界侵蚀重构 order→user 依赖,通过接口通信2 天
🟡 P1API 版本管理添加 /api/v1/ 前缀,定义版本策略1 天
🟡 P1缓存监控添加缓存命中率指标和 Grafana 仪表板半天
🟢 P2循环依赖提取共享类型到独立包1 天

步骤 3:生成 Steering 规则

基于审查发现,生成防止问题复发的 Steering 规则:

# 电商平台架构 Steering 规则(基于 2025-XX 架构审查) ## 模块边界(修复 P1 模块边界侵蚀) - order 模块不能直接导入 user 模块的内部文件 - 模块间通信必须通过 modules/{name}/index.ts 公共接口 - 新增跨模块依赖必须在 PR 中说明理由 ## 配置管理(修复 P0 硬编码密钥) - 禁止在代码中硬编码 API 密钥、数据库连接串等敏感信息 - 所有配置通过 src/config/ 统一管理,从环境变量读取 - 新增第三方服务集成必须使用 Secrets Manager ## 日志标准(修复 P0 日志黑洞) - 所有日志使用 Pino JSON 格式 - 每条日志必须包含:requestId, userId, action, duration - 新增 API 端点必须有请求/响应日志 ## API 规范(修复 P1 API 版本管理) - 所有 API 路径必须包含版本号:/api/v1/... - API 响应格式:{ data, error, pagination } - 破坏性变更必须创建新版本

案例分析

关键收获:

  1. AI 扫描效率高:AI 在数分钟内完成了人工需要数天的架构扫描,覆盖了模块依赖、代码组织、安全配置等多个维度
  2. 人工确认不可少:AI 发现的”过早优化”(Redis 缓存)经人工确认后,认为缓存本身是合理的,只是缺少监控——AI 的判断需要业务上下文校准
  3. Steering 规则是关键:审查发现的问题如果没有转化为 Steering 规则,很可能在下次开发中再次出现
  4. 定期审查形成闭环:将架构审查纳入 Sprint 流程,每 2 周检查一次 Steering 规则的执行情况

避坑指南

❌ 常见错误

  1. 只做一次架构审查就”完事了”

    • 问题:架构审查是一次性活动,审查后没有持续监控,架构问题很快复发
    • 正确做法:将架构审查纳入 CI/CD 流程,PR 级自动检查 + 季度全面审查形成闭环
  2. 完全依赖 AI 的审查结果

    • 问题:AI 可能产生误报(将合理的设计判断为反模式)或漏报(无法理解业务上下文)
    • 正确做法:AI 审查结果作为”初筛”,架构师进行人工确认和优先级排序
  3. 审查清单过于庞大导致”审查疲劳”

    • 问题:50+ 项的审查清单让团队望而却步,最终流于形式
    • 正确做法:根据项目阶段和风险级别,选择最相关的 10-15 项重点检查
  4. 发现问题但不修复

    • 问题:架构审查发现了大量问题,但没有分配修复任务和跟踪进度
    • 正确做法:每个发现的问题都创建任务,分配负责人和截止日期,在下次审查时跟踪进展
  5. Steering 规则写了但没人遵守

    • 问题:Steering 规则文件存在但 AI 编码助手没有加载,或团队成员不了解规则内容
    • 正确做法:确保 Steering 规则在 AI 编码助手中正确配置,定期在团队会议中回顾规则
  6. 忽略架构漂移的早期信号

    • 问题:小的架构违规被忽略,逐渐积累成严重的架构退化
    • 正确做法:在 CI/CD 中配置架构规则检查(SonarQube Architecture / Dependency Cruiser),违规即阻断合并
  7. 架构审查变成”批评大会”

    • 问题:审查会议变成对开发者的批评,导致团队抵触架构审查
    • 正确做法:聚焦于系统改进而非个人责任,使用”我们如何改进”而非”谁写了这个烂代码”的语气

✅ 最佳实践

  1. 渐进式引入架构审查:从 PR 级自动检查开始,逐步扩展到季度全面审查,不要一次性引入所有检查项
  2. AI + 人工协作:AI 负责自动化检测(依赖分析、反模式扫描、配置检查),人工负责业务判断(架构合理性、演进方向)
  3. Steering 规则即架构文档:将架构约束转化为 Steering 规则,既是文档也是自动化约束
  4. 架构适应度函数:使用 ArchUnit / Dependency Cruiser 编写架构测试,像单元测试一样在 CI 中自动运行
  5. ADR 驱动审查:每次架构审查都检查现有 ADR 是否仍然有效,过时的 ADR 及时更新或替代
  6. 可视化架构健康度:建立架构健康度仪表板,让团队随时了解架构状态
  7. 架构审查培训:定期对团队进行架构审查培训,提升全员的架构意识
  8. 反模式案例库:积累项目中实际遇到的反模式案例,作为团队的学习资料

相关资源与延伸阅读

  1. SonarQube Architecture 文档  — Sonar 官方架构分析配置指南,支持意图架构定义和漂移检测
  2. ArchUnit 用户指南  — Java 架构测试框架,支持分层约束、依赖检查、命名规范等自动化测试
  3. Dependency Cruiser 文档  — JavaScript/TypeScript 依赖分析工具,支持架构规则定义和可视化
  4. CodeScene 架构分析  — 行为代码分析平台,支持架构热点分析和 PR 级架构审查
  5. Architecture Fitness Functions(InfoQ)  — 架构适应度函数概念详解,将架构约束转化为自动化测试
  6. Agentic AI 赋能架构治理(O’Reilly)  — AI Agent 如何增强架构治理的方法论
  7. AI 代码审查中的架构漂移检测  — 使用 MCP 在 AI 辅助开发中强制执行架构模式
  8. AI 生成代码的反模式与质量退化  — AI 生成代码中常见的架构反模式分析

参考来源


📖 返回 总览与导航 | 上一节:30c-系统设计文档AI生成 | 下一章:31a-AI辅助测试概览

Last updated on