improve-codebase-architecture

工程开发 社区 @mattpocock
信任分
88/100
兼容 Agent
1
速查档案 只列事实:领域、Agent、信任分、作者、原文章节。装与不装请看下方作者解读。
领域
工程开发
兼容 Agent
Claude Code
信任分
88 / 100 · 社区维护
作者 / 版本 / 许可
@mattpocock · 未声明 license
安装命令数
1 条

需要注意: 未限定 allowed-tools,默认拥有全部工具权限。

想读作者英文原文? ↓ 滚到正文区切换 · 在 GitHub 查看 ↗

解读由编辑根据原文凝练而成,命令、链接、术语均与作者原文一致;想看完整论述请切到右侧

设计思路

improve-codebase-architecture 是 mattpocock 的「架构改进」skill——用《A Philosophy of Software Design》里的「deep / shallow module」这把尺子,找出当前代码库里浅 + 漏的接口,提议加深它们。skill 的灵魂是 grilling loop——选定候选后并不直接动手,而是和用户一起拷问设计树,让候选在对话中成形。

Glossary(按作者原文)

  • Locality:彼此调用得很近的代码应该住得很近——降低跳转成本。
  • Deletion test:怀疑某个模块「shallow」时问:删掉它是把复杂度集中了,还是只是搬家了?「集中」就是好信号——这正是我们想加深的对象。

流程

1. 寻找候选 扫代码库找:

  • 哪些重复模式调用方式各异(缺 locality)
  • 紧耦合模块在哪些 seam 漏出去
  • 哪些部分没测试 / 通过当前接口很难测

对怀疑「shallow」的部分跑 deletion test,回答「集中」就是候选。

2. 呈现候选(编号列表) 每条候选给:

  • Files 涉及哪些文件 / 模块
  • Problem 为什么当前架构在制造摩擦
  • Solution 改成什么样(白话)
  • Benefits 用 locality / leverage 解释、说测试如何变好

CONTEXT.md 的领域词汇 + LANGUAGE.md 的架构词汇——CONTEXT.md 里定义了「Order」就说「Order intake 模块」,不要叫「FooBarHandler」也不要叫「Order service」。

ADR 冲突处理:候选与现有 ADR 冲突时,只在摩擦真实到值得 reopen ADR 时才提;并明确标注「contradicts ADR-0007 — but worth reopening because…」。不要列出 ADR 禁止的所有理论 refactor。

关键纪律:还不要提议接口形状——先问用户:「想探索哪一项?」

3. Grilling Loop 用户选定候选后,进入拷问对话——和他一起遍历设计树:约束、依赖、加深后的模块形状、缝隙后藏什么、哪些测试存活。

对话中即时副作用

  • 加深的模块用了 CONTEXT.md 没有的概念 → 当场加进去(同 grill-with-docs 纪律)
  • 用户用了模糊词 → 当场把它沉淀进 CONTEXT.md
  • 用户拒绝候选并给出 load-bearing 理由 → 提议建 ADR:「Want me to record this as an ADR so future architecture reviews don't re-suggest it?」仅当理由对未来探索者有用时才提;临时性理由("not worth it right now")和不证自明的不要提。
  • 探索接口形状 → 跳到 INTERFACE-DESIGN.md

适合谁

  • 重构准备阶段的资深工程师
  • 想用「集中复杂度而非搬家复杂度」标准做架构判断的 Tech Lead
  • 准备做 deep / shallow 评估的代码 review 时机

何时不该用

  • 项目早期、形状没定——加深动作过早
  • 简单 bug fix——不到架构层

配套

grill-with-docs(同源的拷问 + CONTEXT 纪律)、design-an-interface(接口形状探索)、request-refactor-plan(提出重构 plan)、diagnose(Phase 5/6 暴露架构问题时的上一步)。