好的文章體系跟好的程式體系承受同一組結構壓力:內容會變動(資料更新、觀點修正)、體系會擴充(新文章、新比較對象)、讀者多樣(不同背景從不同入口進來)、單位之間有依賴(引用、前置知識)。SOLID 原則在程式界管理這組壓力數十年,而它管的是「多單位系統的責任分配與依賴方向」——這個層次跟單位是函式還是文章無關,所以每一條都能在文章體系找到對應物。

本文建立 SOLID 在文章寫作的系統性映射,定位在組合層:卡片盒筆記法(Zettelkasten)管原子層——一張卡一個概念;SOLID 管組合層——文章之間的責任邊界、依賴方向、擴充點設計。兩層疊加構成完整的內容架構方法。

推導源頭:四種結構壓力

映射的推導源頭是文章體系承受的四種結構壓力,五原則各自管理其中一種:

壓力具體形式對應原則
變動財報換季、資料過時、觀點修正S
擴充新文章加入系列、比較組加入新對象O
讀者多樣不同背景、不同目的的讀者從不同入口進來L、I
依賴引用關係、前置知識、抽象層與具體層的變動傳遞D

結構同構的基礎是概念對應:

程式概念文章對應物共同承受的壓力
模組(module)一篇文章 / 一張卡都是一個責任單位
介面(interface)title、description、index 條目都是使用者看到的承諾
呼叫者(caller)讀者都從承諾進入、依賴行為符合承諾
依賴(dependency)引用、前置知識都有方向、都會傳遞變動
重構(refactor)改版、拆篇、搬段落都要在不破壞使用者的前提下改結構

差異同樣真實:文章沒有編譯器、違反原則不會 crash——這決定了執行機制的不同,在「類比的邊界」段展開。

S 單一責任:一篇文章一個變動理由

程式的 SRP 說一個模組只有一個變動理由。寫作映射:一個寫作單位只承擔一個知識責任、只因一種讀者需求而修改。

判別測試有兩個。變動理由測試:這篇文章會因為什麼事件需要更新?獨立事件超過一種、就是拆分候選。刪除測試:刪掉某段後文章的核心論證仍完整、該段承擔的就是另一個責任、該路由出去。

實證:一篇企業案例分析初版同時承擔「該公司自身的財報判讀」跟「跨公司結構比較」,兩個責任互相擠壓——案例深度被比較表佔空間、比較內容被鎖在單一公司的敘事裡無法擴充。拆成案例篇比較篇後、兩邊各自深化(詳見 #231 案例文章跟跨公司比較是兩個分析責任)。知識卡的「一卡一概念」是 S 在原子層的同一條原則。

違反訊號:更新 A 議題時被迫重讀整篇 B 內容;兩篇文章互相解釋對方的主題;段落放錯位置時的處理是路由到該去的地方、把刪除當成唯一選項會丟失內容(見 #212 SRP 違反是路由訊號)。

O 開放封閉:對擴充開放、對重寫封閉

預期會成長的結構、設計成「新增用追加的、既有內容維持穩定」。這條原則的寫作實作是擴充點設計:比較表的比較軸、索引的表格結構、系列的骨架——這些是穩定結構、成長發生在往裡面加行加篇。

實證:加盟餐飲結構比較獨立成篇時、比較軸(食材供應模式 / 獲利結構 / 品牌集中度 / 展店策略 / 估值)就是擴充點——之後加入第三家公司只在既有軸加行、任何案例文章都保持穩定。知識卡體系同樣:新文章引用既有卡、卡不需要為新文章修改。

邊界是這條原則最重要的部分:O 管結構骨架、內容不在管轄範圍。把 O 推到內容層會變成「所有案例共用同一模板」——這直接牴觸情境優先於模板的寫作原則(AGENTS.md 原則八)。案例敘事、失敗條件、回退路徑依各自情境重寫;守 O 的只有表格軸、索引結構、系列骨架這些擴充點。

違反訊號:每次加新內容都要回頭改動多篇既有文章;比較內容散落在多篇案例文章裡、加新比較對象時不知道改哪篇。

L 替換性:同類文章對讀者履行同一契約

程式的 LSP 說子型別可以替換父型別而不破壞呼叫者的預期。寫作映射在讀者預期層、有兩個檢查面。

介面對實作:title、description、index hook 是介面、內文是實作——讀者依承諾進入、內文必須履行。description 承諾「批判性分析」、內文就要有批判檢驗、單純的公司簡介違約。同類對同類:同一個索引分類下的文章(例如「實作案例篇」)對讀者履行同型的功能契約——讀者讀過一篇案例分析、對下一篇的功能預期(有定位、有判讀、有紅旗、有可遷移框架)應該成立。契約是功能層承諾、模板是結構層複製、L 要求前者。

實證:#97 Metadata surface 要納入寫作 review——正文已改新 frame、title 跟 MOC hook 保留舊 frame、介面跟實作脫鉤;#161 摘要壓縮可以丟細節、不可以改模態——description 把本體的「可延後但要記錄」壓成「不可跳過」、讀者依摘要行動就偏離本體。

這是五個映射裡最依賴類比延伸的一條——程式的 LSP 靠型別系統定義、文章的「替換」發生在讀者預期層、沒有機器可驗證的判準。保留它的理由是「介面承諾 vs 實作履行」的檢查在寫作實務反覆出現、上述兩張卡都是這條的實例。

I 介面隔離:讀者不被迫消費無關內容

程式的 ISP 說 client 不該被迫依賴用不到的方法。寫作映射:不同讀者群透過不同入口進入體系、每條入口只包含該讀者需要的內容。

實作在三個層次。模組層是讀者路線表——企業財務分析模組的三條路線(報表識讀 / 投資評估 / 價值鏈追溯)讓同一批文章對三種讀者呈現三種讀取序列、每條序列跳過該讀者用不到的篇章。文章層是視角分段——投資人視角跟加盟主視角各自成段、讀者可以跳過非自身視角的段落。術語層是知識卡外移——術語解釋放卡片、需要的讀者點進去、已熟悉的讀者不被打斷。

文章的 I 比程式更嚴苛:程式的 caller 被迫依賴多餘介面、代價是編譯負擔;讀者被迫閱讀無關內容、代價是直接棄讀。

違反訊號:描述目標讀者時需要用「和」連接多個群體、且各群體需要的內容在文中交錯到無法跳讀;讀者要讀完大段無關內容才能到達自己需要的部分。

D 依賴反轉:案例依賴方法論、方法論不依賴案例

程式的 DIP 說高層模組跟低層模組都依賴抽象。寫作映射:具體層(案例文章)依賴抽象層(方法論、知識卡);抽象層引用具體只作為示例、不作為前提。

依賴方向決定變動傳遞方向。案例更新(財報換季、公司改變策略)不會迫使方法論改寫;方法論修正會提示所有案例重檢——這個不對稱正是體系要的:抽象層穩定、具體層流動。

實證:AGENTS.md 的既有規則「Backend 是語言無關層、各語言章節可連到 Backend 能力、Backend 不反向依賴語言實作」就是 D、先於本文存在。ddd/(方法論精神層)跟 flutter/(語言實作層)的模組拆分同樣路由單向。案例文章引用企業評估定位做兩軸分析、方法論篇不需要知道任何一篇案例的存在。

違反訊號:讀方法論篇必須先讀過某篇案例才看得懂(抽象依賴了具體);修改某篇案例時要回頭改方法論(變動反向傳遞);方法論的判準用某個案例的特殊條件寫成(過度擬合單一 case)。

類比的邊界

映射有三個誠實的限制。

執行機制不同。程式違反 SOLID 由編譯器、runtime、測試暴露;文章違反由 review 暴露、依賴人或 agent 執行。所以 SOLID 寫作映射必須掛上 review 機制才有效力——multi-round review 的 frame 清單裡、結構軸(責任邊界 / 依賴方向 / 擴充點 / 讀者分流)是一個獨立的檢查 frame。

L 是最弱映射。型別系統對「可替換」有機器可驗證的定義、讀者預期沒有。L 的寫作版本操作化成「介面承諾 vs 實作履行」的比對——這是它可執行的形式、也是它的極限。

D 不是真正的反轉。程式的 DIP 核心是控制反轉:高層模組定義抽象介面、低層模組實作它、依賴方向被「倒過來」。寫作映射借不到這一半——方法論沒有定義一個「案例必須實作的介面」、案例也不是被注入方法論的可替換實作。寫作版的 D 實際只保住了 DIP 的一半:依賴無環(案例引用方法論、方法論不回指案例)加上穩定度梯度(抽象層穩定、具體層流動)。用「反轉」命名是取它「變動不反向傳遞」的效果、不是取控制反轉的機制;把它讀成完整的 IoC 會期待一個不存在的介面契約。這一半的缺席也解釋了為什麼 D 的違反只能靠依賴圖檢查(有沒有環、改案例要不要回改方法論)、而不像程式能靠介面型別擋下。

模板化風險。O 跟 L 都有被過度應用成「統一模板」的風險。判別線:SOLID 管誰承擔什麼責任、依賴往哪走、擴充點在哪——這些是結構;情境敘事、案例語言、失敗條件的描述是內容、依情境重寫。結構原則被拿來否定合理的情境差異時(「這篇的章節跟那篇長得不一樣、不符合 O」)、是誤用訊號、回到情境優先於模板。

跟卡片盒筆記法的分工

方法管什麼
原子層Zettelkasten 卡片一卡一概念、卡片連結、原子可重組
組合層SOLID 寫作映射文章責任邊界、依賴方向、擴充點、讀者分流

S 是兩層的接縫——卡片層的「一卡一概念」跟文章層的「一篇一責任」是同一條原則在不同粒度的形式。體系從卡片長到文章、從文章長到模組時、S 一路適用;O / L / I / D 在多篇文章開始形成體系時才進場。

結構檢查清單

情境訊號原則行動
一篇文章有兩種獨立的更新理由S依變動理由拆篇、各自引用
完整的跨個體比較表出現在單一個體的文章裡S比較獨立成篇、案例篇留一句基準引用
每次加新內容都要改動多篇既有文章O找出該系列的擴充點(表格軸 / 索引結構)、重設計成加行加篇
description 或 index hook 跟內文的功能不一致L對齊介面與實作——改承諾或改內文、二選一
同分類下的文章功能參差、讀者預期無法遷移L對齊功能契約(每篇都有定位 / 判讀 / 框架)、結構仍依情境自由
目標讀者要用「和」連接、內容交錯無法跳讀I拆讀者路線、或文章內視角分段
讀方法論要先讀某案例才懂D方法論改用自包含的通用示例、案例降級為選讀連結
修案例要回頭改方法論D檢查方法論是否過度擬合該案例、把特殊條件還原成通用判準

檢查時機有兩個:新文章動筆前(決定它的責任邊界跟依賴方向)、系列成長到出現結構張力時(加新內容變得越來越貴、就是結構 review 的訊號)。