审查 refactoring-2e — 2026-08-27
结论: ISSUES(4 条,全部为标注级/编辑级,不伤「读完就不必看原书」判据;修完即可 PASS)
门禁实跑(2026-08-27,审者本人所跑,末行原样):
book-verify: 1 本有拆解、共 616 处出处、0 处对不上
book-jargon: 1 本,共 0 处专业词没解释就用了
生面孔配额:段级超额 0 处(上限 1)、节级超额 0 处(上限 5)
book-dodged: 1 本,共 2 个词被躲开(阈值:原书出现 ≥15 次)
三个专项裁断(任务书点名的核心问题)
1. 名录重组:成立,但「静默丢掉」的部分没有交代(问题 1)
原书第二部分是 64 条五段式手法名录(22-fm.txt 逐条点过),拆解按手法族重组为 05–11 章。 逐章比对名录后的覆盖账:
| 原书章 | 条数 | 拆解覆盖 | 缺 |
|---|---|---|---|
| 第6章 第一组重构 | 12 | 10 | 隐藏函数、变量改名(整条未提;「改名」作为动作在 01 第三刀有讲,但该条手法名未出现) |
| 第7章 封装 | 9 | 8 | 以查询取代临时变量(仅 05 §3 一句「把临时变量查询化」带过,06 章内无) |
| 第8章 搬移特性 | 9 | 9 | 无 |
| 第9章 重新组织数据 | 5 | 5 | 无(引用↔值双向都在 08 §5–§6) |
| 第10章 简化条件逻辑 | 6 | 6 | 无 |
| 第11章 重构API | 10 | 9 | 函数参数化(挪到 11 章 §3 当上移的备步骤用,一句带过;命令↔函数、查询↔参数等双向都在) |
| 第12章 处理继承关系 | 11 | 7 | 构造函数本体上移、函数下移、字段下移(全未提)、折叠继承体系(仅 11 章全景图里「折叠」一词,未讲机制;原书 §12.9 专节) |
合计 64 条中约 7 条被丢掉或仅一句带过,比例约 11%,方向上都在次要侧——重组作为阅读路径 是成功的:抽「封装」「搬移」「条件逻辑」三章逐手法核,读者对每条覆盖到的手法都能拿到 「什么坏味道触发它(触发判据均挂了第 03 章对应味道)、机械步骤是什么(至少一条带具体代码的 走查,如 06 Priority 生长史、09 鸟例、07 CSV→管道)、何时停手(反向判据/放弃条件,如 10 §6 「请放弃本重构」、09 反对一刀切多态)」三件套,符合红线二的走查要求。
但 index §4 的「不覆盖」表和书卡 notCovered 都只交代了「不逐条复刻」这句话,没有点名 丢掉的是哪几条。 index §4 覆盖栏还写着「七大类手法……的动机、机制与适用判据」,读者会 以为名录齐的。这正是任务书说的「静默丢掉」。修法见问题清单第 1 条。
2. 主走查实算:全部通过
- 01 章账单:按原书 JS 语义实跑(amountFor switch + credits 累加):hamlet 55 座 40000+1000×25=65000 美分=$650.00 ✓;as-like 35 座 30000+10000+7500+10500=58000=$580.00 ✓; othello 40 座 50000=$500.00 ✓;合计 173000 美分=$1,730.00 ✓;积分 25+12+10=47 ✓—— 与原书 117 段输出逐字一致,拆解 §2 的 三个算式全部复算无误。
- 04 章测试网:把原书 Province 类逐字抄下实跑:初始 shortfall 5 ✓、profit 230 ✓(书值); 改 producers[0].production="20" 后 shortfall −6、profit 292 ✓;边界:空生产商 30/0 ✓、 需求 0 得 −25/0 ✓、需求 −1 得 −26/−10 ✓。全部正确;唯一例外见问题 2—— §3 第四步那句「手算复核」括号本身算不出 230。
- 09/11 章鸟例:与原书 18-ch10.txt:491–505 逐字核对:EuropeanSwallow 35 ✓、 AfricanSwallow 40−2×numberOfCoconuts ✓、NorwegianBlueParrot 钉住 0/否则 10+voltage/10 ✓、 plumage 三分支(>2 椰子 "tired"、>100 电压 "scorched")✓;11 章「两次变身」的 SpeciesDelegate 叙述与原书 §12.10 结构一致。
3. dodged 豁免:成立,维持
grep -o 实数:「异步」全书 17 次全部位于 text/08-fm.txt(「服务与支持」,出版社
「异步社区/异步图书」导航页)——书规明文导航章不读不引;且前言 07-fm.txt:146–147 原文明说
「将回调重构成 promise 或 async/await……不是本书要讨论的内容」。「对数」15+ 次全部是
「对数据」的子串,纯误报。两项都已在书卡 notCovered 末条如实记录。豁免通过。
其他核对(按收尾自检表)
- 完 整性:原书 12 个正文章全覆盖(ch1→01, ch2→02+12, ch3→03, ch4→04, ch5+6→05, ch7→06, ch8→07, ch9→08, ch10→09, ch11→10, ch12→11);导航章(版权/赞誉/速查表)按规未读未引。
- 红线一:抽读全部引文均为一两句内的短引,带引号+脚注,无整段搬运。
- 红线二:01(七刀全程)、04(七步织网)、05(迁移式改参数四步)、06(Priority 五步)、 07(CSV→管道)、08(苏格兰布丁改名)、09(鸟例)、10(deliveryDate 拆双函数)、11(两次变身) 各有落在正文的主走查,带真实数字;12 章以 Jeffries 五分钟故事(实数)+数据库 expand-contract 五步状态序列承走查,性质所限可接受。
- 出处:book-verify 616 处 0 错;另抽 5 条脚注人工回核原文全部属实(01[^4]「需求通常 不来则已」、06[^13]「内联成一个类再用提炼类」、09[^12]「收拢到一处」、12[^19]「并行修改」 五步、08[^16]「ID为123」5 订单)。再加跑一个标签↔文件全量比对脚本:616 条中 615 条 章名标签与所指文件一致,仅 1 处错位(问题 3)。
- 判断块:13 处(12 章+index 4 条)全部带「如果错,会错在」。
- 总纲:六节齐全;§2 全书一条主线十步读完可复述全书,机制细节未上提(抽查 §2⑧ CI 就地 一句定义、§2⑨ 只留效果句,海拔合规);兑现表 28 行,抽 6 行回核(01§4第三刀→12§5、 03§5→06§3、05§8→01第六刀、09§5→11§4、07§7→05§8、12§5→01§4)全部兑现。
- 台阶:抽 09 §3、06 §3、12 §4 及 01 §4(七刀首句连读)——首句抄列不跳级。
- 三个声音:index §5 判断块声明三分,12 §8 正时分标(编者注 Web 版说明[^33]、导读立场 均记在名下)——唯「十六字心法」的更细一层归属有误,见问题 4。JS vs Java 差异收拢在 12 §7,四个差异点各有出处(前言 128/145、ch1 Babel 脚注 319、ch11 构造函数限制 1076), 兑现表对应行成立。
- 书卡:readState/read/claims 六条/notCovered 六条/summary/soWhat 齐全,与拆解实际覆盖 一致(notCovered 缺名录丢条目一条,归入问题 1)。
- 台账泄漏:正文无格式/许可/清洗统计;index 页脚「原始书籍文件不入库」一句属影响阅读 方式的来源说明,与样板书页脚同款,放过。
- 生词/配额/空转词:门禁全绿;抽读 03 §3「语义(用词实际承载的意思)」、04「行省(province)」
「测试夹具(fixture)」等就地解释属实;
TODO(没懂):零命中。
篇幅口径纠正(记录,不算拆解的问题)
任务书里的「约 20.5 万字符=原书 0.54×」是单位错配(拆解字节 203,224 ÷ 原书字符)。 同口径实测:拆解 97,433 字符 ÷ 原书内容章 380,960 字符 = 0.26×(字节口径 0.30×)。 按既定方针(名录章不逐条复刻)+ 上述逐章机制核验,「读完不必看原书」判据仍成立, 但后续引用一律改用 0.26×,与高手笔记先例(0.75×→0.40× 的纠正)同一处理。
问题清单
- [index.md §4 不覆盖表 + aiRef/sources/refactoring-2e.md notCovered] 名录 64 条中约 7 条 被静默丢掉或仅一句带过(隐藏函数、变量改名、以查询取代临时变量、函数参数化、构造函数 本体上移、函数下移、字段下移、折叠继承体系)——违反任务书核心裁断「静默丢掉的手法要在 不覆盖说法里交代」——修法:两处各加一条,点名这些手法并写明「完整做法请回原书名录」。
- [04-self-testing-code.md §3 第四步括号] 「利润 230 也能手算复核:按成本从低到高填需求 ——9 件×10 + 10 件×12 + 剩余 11 件×6 需求×20 售价」这句复核算不出 230:Sinope 成本 原书是 10 不是 6,前两家填完剩余需求是 15 不是 11,需求价值按已满足需求 25×20=500 而非 30×20——违反「走查里每个数值都要站得住」(审者按原书代码实算:500−(9×10+6×10+10×12) =500−270=230)——修法:改成上述正确三行算式,或删掉括号只留「期望值以原书运行为准」。
- [06-encapsulation.md 脚注 18] 标签写「封装」第 1177 段,地址却是
text/14-ch06.txt:1177(第 6 章「第一组重构」封装变量一节)——章名标签与地址错位,book-verify 只核 路径:行号:短语,核不出标签——修法:标签改为「第一组重构」。 - [12章 §8 + index.md §5 判断块三] 「十六字心法」写成「熊节从第 2 版手法中读出的…… 导读自己的提炼」;原文(05-fm.txt:36–38)是熊节转述其 ThoughtWorks 同事王健的总结, 熊节只是指出它与第 2 版保持对象完整手法暗合——违反「三个声音分标」及「所有引自导读的 立场均已当场注明出自谁」的自我声明——修法:改为「导读转述王健的十六字心法」; 「对变更过程(而非只是结果)的设计」确为熊节自己的分析,可保留。