附加文件与配置生成 · 第 8 / 9 篇

共享资源键很脏时,前缀裁剪是在保护输出 API

前缀裁剪不是为了少打一段字符串,它真正解决的是共享资源键命名和最终生成 API 之间的边界污染。

第二季里有一个很容易被低估的点:

前缀裁剪。

表面上看,它好像只是把:

  • Build.WelcomeMessage

变成:

  • WelcomeMessage

但如果只把它理解成“少打一段前缀”,就会错过它真正的价值。

为什么前缀裁剪本质上是在保护输出 API

共享资源键在真实项目里,经常会带着历史命名习惯:

  • Build.WelcomeMessage
  • Build.Pages.HomeTitle
  • Shared.Release.Channel

这些名字对资源维护者可能合理,但如果直接照搬进生成结果,输出 API 很快就会被污染:

  • BuildStrings.Build.WelcomeMessage
  • BuildStrings.Build.Pages.HomeTitle

这类 API 一眼看上去就知道,输入命名体系直接泄漏到了输出层。

所以前缀裁剪真正要做的,不是缩短名字,而是把“共享资源命名体系”和“最终消费 API”分开。

为什么它必须发生在建模阶段

如果等到渲染层再去想“这个前缀要不要隐藏”,职责就已经乱了。

因为在那之前:

  • 条目怎么分层
  • 哪些名字会形成嵌套类
  • 哪些路径会发生冲突

都已经依赖条目键本身。

所以更稳的顺序只能是:

  1. 先读取前缀策略
  2. 先把共享前缀裁掉
  3. 再把裁剪后的键送进层级建模

只有这样,后面的树形路径和渲染输出才会干净。

为什么它不能默默“尽量兼容”

前缀配置一旦写错,如果生成器选择模糊兼容,结果只会更糟:

  • 本该裁剪的没裁掉
  • 本该报错的继续通过
  • 某些文件 API 干净,另一些文件 API 又带着脏前缀

所以第二季里,前缀策略必须是正式契约,而不是宽松建议。

这也是为什么会有两类明确失败:

  • 前缀本身不合法
  • 条目根本不匹配前缀

为什么这一步和“输出美观”不是一回事

更深一层看,前缀裁剪其实是在回答:

生成器到底是忠实复写输入命名,还是要为调用方重建一个更稳定的消费接口。

第二季选择的是后者。

因为真实项目里,生成器的价值从来不是“原样把配置打印成代码”,而是把不够适合直接消费的输入系统,转成更稳定的编译期 API。

一句话结论

前缀裁剪真正保护的不是字符串长度,而是输出 API 不被历史资源键命名体系拖脏。

教程导航

继续阅读

当前文章已经挂到教程顺序中,建议按相邻章节继续。

上一篇 目录约定不是装饰,它直接改变输出命名空间身份 当目录约定进入第二案例后,目录层级不再只是文件组织方式,而会正式进入生成器的命名空间决议。 下一篇 显式文件发现,真正打破的是文件名约定的锁定 当生成器支持显式文件发现后,命名约定就不再是唯一入口,这一步才让第二案例真正适合接旧项目。
查看系列目录 查看全部文章

标签

分类