最小化读者负担(Minimize Reader Load)是一条面向代码可维护性的原则型技能,适用于审阅或塑造那些难以追踪的代码。它的核心定义是:可维护性等于读者理解代码所需付出的工作量。与之相对,LOC(代码行数)、圈复杂度和「整洁架构」都只是代理指标,真正重要的是读者负担。
该原则从两个维度追踪读者负担:
一是追踪层数(Layers to trace)——问题与答案之间隔了多少层间接引用。
二是需保持的状态量(State to hold)——读者必须在脑中记住多少隐藏或可变上下文。
文中指出,这两个维度相互独立。一个包含 50 个全局变量的扁平文件,可能和一个 6 层适配器栈一样难以推理,因此两者都需要防范。这是「守护上下文窗口(Guard the Context Window)」在人类读者身上的类比:读者的工作记忆同样是有限的。
具体模式(做法)包括:
折叠不配存在(不挣得其保留价值)的层:只有单一调用者的包装器、没有第二种实现的适配器、为从未到来的未来引入的间接引用,都应内联。
让相邻层改变抽象:如果某一层只是重复相同的方法和参数,就会增加读者负担而没有带来压缩,这类穿透式层应当折叠。
要求接口压缩:一个宽泛却隐藏不了多少复杂度的接口,会让读者既学表面又学实现;应优先选择能隐藏有意义决策的边界。
缩小状态作用域:优先使用纯函数(返回而非变更)、局部变量优于字段、字段优于模块状态、模块状态优于全局变量;用派生代替同步。
在边界处命名不变量,而不是在每个使用方命名,这样读者只需学习一次。
在新增一个层或一份状态之前,先问:它在别处减少的读者负担是否至少同样多?
检验标准是:一位新读者能否在 30 秒内回答「X 来自哪里?」和「什么能改变 X?」。如果做不到,就削减层数或削减状态。
以上为该技能介绍中提供的全部信息;安装命令、定价、支持平台等内容暂未提供。