mcpField
S
sliced-bread-depth

sliced-bread-depth

github.com/paulnsorensen测试与质量0242 次安装3 周前更新
代码仓库

关于 sliced-bread-depth

Sliced Bread Depth 是用于评估代码仓库各切片深度的审查技能,检查小型公共接口是否由充实的内部实现支撑。它会盘点切片、测量结构,并以只读方式给出评估和拆分建议。

主要功能

  1. 01盘点切片的公共接口
  2. 02测量接口与实现的代码行数
  3. 03评估接口规模和生命周期混杂
  4. 04按结论对切片分类
  5. 05只读报告拆分机会

适用场景

  1. 01审查仓库各模块的实现深度
  2. 02发现实现集中于公共入口的切片
  3. 03比较同类切片的设计一致性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/paulnsorensen/sliced-bread-architecture --skill sliced-bread-depth

安装后在 Claude Code 中输入/sliced-bread-depth确认已加载。

详细介绍

切片面包深度

将每个切片评为深模块:公开接口小而稳定,隐藏着大量实现。切片即使通过了所有边界检查,外壳本身也可能_就是_实现——一个 900 行的外壳只包着两个简单助手,虽然符合要求,却很浅。完整的原理请参阅 Sliced Bread 参考文档;本技能用于进行衡量。

范围

默认检查仓库中的每个切片。如果用户指定了切片,只衡量这些切片,但仍列出完整清单,以便了解比例的背景。纳入有文档说明的外壳例外情况(例如,作为切片接缝的单例)——对其进行分类,但不要将其本身标记为问题。

步骤 1 — 清点

找出每个切片的外壳——以该语言原生形式呈现的公开接缝:Go 中的导出标识符、Python 中的包 __init__ 接口、TypeScript 中的 index 模块,以及其他语言中的公共类接口。应用接口测试:使用者能否在顶层看到一组精简且一目了然的可用操作,而无需深入内部,也无需面对一个包含上百个符号的入口点?对外壳形态进行分类:

形态特征
薄门面重新导出、工厂、目录;自身几乎没有或完全没有逻辑
框架绑定外壳必须继承框架基类(场景节点、视图、组件)
服务/模拟外壳拥有热循环或长期运行的进程(step、tick、dispatch)

步骤 2 — 衡量

对每个切片使用代码计算(不要估算):

  • 外壳 LOC 和 切片总 LOC ——关键比率是实现占比:外壳 LOC ÷ 切片总 LOC。
  • 内部模块数量和 LOC ——外壳所隐藏的深层实现。
  • 公共接口 ——外壳上导出/非下划线函数、方法和事件/信号的大致数量。
  • 生命周期组合 ——公共接口是否混合了不相关的生命周期(一次性设置与逐帧/逐请求操作,或 UI 接线)。

第 3 步——评估

当以下两项都成立时,建议拆解表层文件(提取内部实现——绝不增加第二个公共接口):

  • (a) 表层文件包含热路径实现;且
  • (b) 深层为空或内容较少(实现占比主要集中在表层),或者公共接口混合了互不相关的生命周期。

校准标准,确保指标公平:

  • 占比才是指标,绝对代码行数(LOC)不是。 对于纯工厂叶片切片,一个 250 行的表层文件占其全部内容也很健康;而一个 900 行的表层文件占所在切片 85% 的内容,就值得警惕。
  • 框架绑定的表层文件可适当放宽凝聚性要求。 框架回调(生命周期、物理、渲染)必须位于子类中;提取目标应是由表层文件持有的普通辅助对象,而不是第二个公共接口。
  • 内部文件多不等于发现问题。 一个包含三十个深层模块的宽泛表层文件存在的是 API 聚类问题——应对接口进行分组和收窄,而非深度问题。不要建议拆分切片。
  • 尊重已记录的设计意图。 如果文档字符串或注释声明其接口设计有意如此,应引用相关内容并给出保留意见,而不是判定为问题。
  • 双接口(实时单例 + 纯辅助门面)应采取“澄清而非拆分”的处理方式:建议说明各接口的职责,而不是另行设计第二个表层文件。
  • 比较同类项。 两个实现相同模式、但深度相反的切片(一个委托其热循环,另一个将其内联)是置信度最高的问题——代码库中已经存在目标形态。

增长防护——评估深度时应排除的误报:

  • 仅有一个使用方本身并不能证明抽象过早;应评估是否存在实际压力。两个使用方是常见依据,但不是硬性要求。
  • 新概念若一直保留在单个文件中,就是正确的做法;不要标记。
  • 为打破跨切片循环依赖而引入的分发器,即使只有一个事件和一个订阅者,也表明存在实际压力。
  • 数值阈值只是参考信号,不应作为可判定的违规项;应评估实现占比、公共接口规模以及生命周期混用情况。
  • 在唯一的隐私机制是文件位置的语言中,将内容标记为内部实现的子目录,表明这种可见性边界确有实际压力,即使其中只有一个文件。

判定结果

判定结果含义
extract两项启发式条件都成立;将内部实现从表层文件中剥离
narrow存在深度;对公共接口进行分组并缩减
watch体量增长明显,但仅涉及单一维度;待下一个功能落地后再评估
healthy深度恰当;无需处理
intent根据已记录的设计意图保持宽泛;引用依据并给出保留意见

输出

报告分为三个部分,仅供只读——此技能绝不修改代码:

  1. 目录——一张表格,包含:切片、形态、表层文件 LOC、内部模块、实现占比、公共接口。
  2. 评估——一张表格,列出每个切片的判定结果,按 extract → narrow → watch 排序;每项附上一行理由,并引用 file:line。
  3. 投资回报率最高的 3 项提取——具体说明哪些内容应从表层文件移出、移至何处,以及代码库中可供参照的先例(如有)。优先选择已有先例支持的机械式改进,而不是推测性重构。

全部判定为 healthy 也是有效结果;绝不要凭空制造问题。

评论

支持 Markdown