修复范围分保守、彻底与最小闭环三档

**同一个问题给两档方案(只改表层 / 从源头重构)是错的提问方式 —— 缺了第三档「最小闭环」:把修复点挪到正确的层,但只加一个字段、不做全量重构。** 范围取舍的标准是「修在源头」与「改动面」两个轴,不是「快」与「对」两个极端。

一、三档是什么

以「订阅条目的公众号封面拿不到」为例:

档做法代价结果
保守只改前端:继续从 content_html 里多匹配几种 <img> 当缩略图风险低、快源里没这张图时永远拿不到,「单独获得封面」做不扎实
彻底抓取阶段抽共享模块:media thumbnail / enclosure / og:image / 正文首图兜底,存成结构化字段动 Rust parser + 数据结构 + schema,范围大、回归测试多正确,但把一次修复变成一次重构
最小闭环只给订阅条目加一个 cover_image 字段,在抓取处填它比保守可靠,不做大重构修复落在源头,改动面可控

二、判据

  • 能不能落在源头 —— 只在前端补救 = 打补丁,源里没有的信息补不出来;信息在源里就该在源里被提取。
  • 改动面是否被最小化 —— 「顺便把逻辑抽成共享模块」是独立的重构目标,不该塞进一次修复里;它值得做,但要单独立项。

三、可复用动作

遇到「改 A 还是重构 B」的二选一时:

  1. 先问「信息/行为源头在哪一层」(见 先定位归属层再动手)。
  2. 把修复点挪到那一层,但只加它需要的那一个字段 / 那一处消费。
  3. 把「抽共享模块 / 统一实现」单独记为后续目标,不在本轮扩张。

二选一的提问本身就是信号:选项只有「太小」和「太大」时,缺的是中间那档。

相关