首页/开发/代码质量与评审速查/架构债:依赖缠绕与泥球迹象
技术债与度量63 条

架构债:依赖缠绕与泥球迹象

架构债的表现:模块间依赖成网(循环依赖)、分层规则名存实亡、公共模块成为垃圾场、变更一触多动;检测靠依赖分析工具与变更耦合分析,治理按边界逐步收口。

架构债是什么

架构债的表现是结构层面的失控:模块间依赖成网(循环依赖)、分层规则名存实亡、公共模块变成垃圾场、改一个功能要动多个不相干的包。它与代码级坏味道的区别在于规模——单个类改好没用,得靠边界收口与调用迁移,治理周期通常以季度计。

基本信息

症状循环依赖 / 分层失效 / 共享大杂烩模块 / 变更一触多动
检测依赖分析工具、变更耦合分析与依赖矩阵的差异
治理先封新入口,再逐步迁移调用
节奏按调用量与团队优先级分批,不以一次性大扫除收尾

常见症状与线索

  • 两个包互相 import,编译期靠同一次构建掩盖了环形依赖
  • 分层目录齐全,但用例层直接调用持久化类
  • tools 或 common 模块被所有模块依赖,里面塞着互不相关的工具
  • 改一个报表字段要同时改四个模块,改动集呈现固定的群体模式
  • 同一份配置或枚举在多处复制,口径开始分叉
  • 新功能只能塞进已有的大模块,因为拆出新模块会触发循环依赖

治理节奏示意

治理节奏示意
1. 标记违规包,产出依赖报告与违规计数
2. 新增代码禁止新违规(在 CI 里设门禁)
3. 按调用量与团队优先级分批迁移存量
4. 违规计数进入周报,观察趋势是否下降
5. 拆出边界时同步补测试,避免迁移引入回归

症状与检测手段

症状检测手段产出
循环依赖依赖分析工具、编译顺序异常环清单与打断点建议
分层失效架构约束检查规则违规调用点列表
大杂烩模块被依赖数与内容主题统计拆分候选清单
变更一触多动变更耦合分析 vs 依赖矩阵隐式耦合的可疑长链
治理要两条腿走路:只禁新违规不动存量,违规计数常年恒定,团队很快失去动力;只做存量迁移不封新入口,边还边欠,永远追不上。
变更耦合分析与依赖矩阵的差异很有价值:代码上没依赖、但总是一起改的文件,往往说明存在隐式的共享知识或复制粘贴的口径,值得先补文档与测试再谈解耦。

易错点

  • 一次性大扫除式迁移:风险集中、周期长,收尾阶段容易被迫中断而前功尽弃
  • 只禁新违规不迁移存量:违规计数恒定,团队逐渐认定治理无意义
  • 拆模块不同步补测试:迁移引入回归,最后被迫回滚并加深对重构的不信任
  • 把架构债写成抽象描述:没有违规清单与调用量数据,无法排序也无法验收

数据来源与参考

  • 《Working Effectively with Legacy Code》相关讨论;依赖分析工程实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌