附加文件与配置生成 · 第 8 / 9 篇
共享资源键很脏时,前缀裁剪是在保护输出 API
前缀裁剪不是为了少打一段字符串,它真正解决的是共享资源键命名和最终生成 API 之间的边界污染。
第二季里有一个很容易被低估的点:
前缀裁剪。
表面上看,它好像只是把:
Build.WelcomeMessage
变成:
WelcomeMessage
但如果只把它理解成“少打一段前缀”,就会错过它真正的价值。
为什么前缀裁剪本质上是在保护输出 API
共享资源键在真实项目里,经常会带着历史命名习惯:
Build.WelcomeMessageBuild.Pages.HomeTitleShared.Release.Channel
这些名字对资源维护者可能合理,但如果直接照搬进生成结果,输出 API 很快就会被污染:
BuildStrings.Build.WelcomeMessageBuildStrings.Build.Pages.HomeTitle
这类 API 一眼看上去就知道,输入命名体系直接泄漏到了输出层。
所以前缀裁剪真正要做的,不是缩短名字,而是把“共享资源命名体系”和“最终消费 API”分开。
为什么它必须发生在建模阶段
如果等到渲染层再去想“这个前缀要不要隐藏”,职责就已经乱了。
因为在那之前:
- 条目怎么分层
- 哪些名字会形成嵌套类
- 哪些路径会发生冲突
都已经依赖条目键本身。
所以更稳的顺序只能是:
- 先读取前缀策略
- 先把共享前缀裁掉
- 再把裁剪后的键送进层级建模
只有这样,后面的树形路径和渲染输出才会干净。
为什么它不能默默“尽量兼容”
前缀配置一旦写错,如果生成器选择模糊兼容,结果只会更糟:
- 本该裁剪的没裁掉
- 本该报错的继续通过
- 某些文件 API 干净,另一些文件 API 又带着脏前缀
所以第二季里,前缀策略必须是正式契约,而不是宽松建议。
这也是为什么会有两类明确失败:
- 前缀本身不合法
- 条目根本不匹配前缀
为什么这一步和“输出美观”不是一回事
更深一层看,前缀裁剪其实是在回答:
生成器到底是忠实复写输入命名,还是要为调用方重建一个更稳定的消费接口。
第二季选择的是后者。
因为真实项目里,生成器的价值从来不是“原样把配置打印成代码”,而是把不够适合直接消费的输入系统,转成更稳定的编译期 API。
一句话结论
前缀裁剪真正保护的不是字符串长度,而是输出 API 不被历史资源键命名体系拖脏。
教程导航
继续阅读
当前文章已经挂到教程顺序中,建议按相邻章节继续。