<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>SOLID on Tarragon</title><link>https://tarrragon.github.io/blog/tags/solid/</link><description>Recent content in SOLID on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 20 Jul 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/solid/index.xml" rel="self" type="application/rss+xml"/><item><title>SOLID 寫作方法論：程式結構原則在文章體系的映射</title><link>https://tarrragon.github.io/blog/record/solid-writing-methodology/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/record/solid-writing-methodology/</guid><description>&lt;p>好的文章體系跟好的程式體系承受同一組結構壓力：內容會變動（資料更新、觀點修正）、體系會擴充（新文章、新比較對象）、讀者多樣（不同背景從不同入口進來）、單位之間有依賴（引用、前置知識）。SOLID 原則在程式界管理這組壓力數十年，而它管的是「多單位系統的責任分配與依賴方向」——這個層次跟單位是函式還是文章無關，所以每一條都能在文章體系找到對應物。&lt;/p>
&lt;p>本文建立 SOLID 在文章寫作的系統性映射，定位在&lt;strong>組合層&lt;/strong>：卡片盒筆記法（Zettelkasten）管原子層——一張卡一個概念；SOLID 管組合層——文章之間的責任邊界、依賴方向、擴充點設計。兩層疊加構成完整的內容架構方法。&lt;/p></description><content:encoded><![CDATA[<p>好的文章體系跟好的程式體系承受同一組結構壓力：內容會變動（資料更新、觀點修正）、體系會擴充（新文章、新比較對象）、讀者多樣（不同背景從不同入口進來）、單位之間有依賴（引用、前置知識）。SOLID 原則在程式界管理這組壓力數十年，而它管的是「多單位系統的責任分配與依賴方向」——這個層次跟單位是函式還是文章無關，所以每一條都能在文章體系找到對應物。</p>
<p>本文建立 SOLID 在文章寫作的系統性映射，定位在<strong>組合層</strong>：卡片盒筆記法（Zettelkasten）管原子層——一張卡一個概念；SOLID 管組合層——文章之間的責任邊界、依賴方向、擴充點設計。兩層疊加構成完整的內容架構方法。</p>
<h2 id="推導源頭四種結構壓力">推導源頭：四種結構壓力</h2>
<p>映射的推導源頭是文章體系承受的四種結構壓力，五原則各自管理其中一種：</p>
<table>
  <thead>
      <tr>
          <th>壓力</th>
          <th>具體形式</th>
          <th>對應原則</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>變動</td>
          <td>財報換季、資料過時、觀點修正</td>
          <td>S</td>
      </tr>
      <tr>
          <td>擴充</td>
          <td>新文章加入系列、比較組加入新對象</td>
          <td>O</td>
      </tr>
      <tr>
          <td>讀者多樣</td>
          <td>不同背景、不同目的的讀者從不同入口進來</td>
          <td>L、I</td>
      </tr>
      <tr>
          <td>依賴</td>
          <td>引用關係、前置知識、抽象層與具體層的變動傳遞</td>
          <td>D</td>
      </tr>
  </tbody>
</table>
<p>結構同構的基礎是概念對應：</p>
<table>
  <thead>
      <tr>
          <th>程式概念</th>
          <th>文章對應物</th>
          <th>共同承受的壓力</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>模組（module）</td>
          <td>一篇文章 / 一張卡</td>
          <td>都是一個責任單位</td>
      </tr>
      <tr>
          <td>介面（interface）</td>
          <td>title、description、index 條目</td>
          <td>都是使用者看到的承諾</td>
      </tr>
      <tr>
          <td>呼叫者（caller）</td>
          <td>讀者</td>
          <td>都從承諾進入、依賴行為符合承諾</td>
      </tr>
      <tr>
          <td>依賴（dependency）</td>
          <td>引用、前置知識</td>
          <td>都有方向、都會傳遞變動</td>
      </tr>
      <tr>
          <td>重構（refactor）</td>
          <td>改版、拆篇、搬段落</td>
          <td>都要在不破壞使用者的前提下改結構</td>
      </tr>
  </tbody>
</table>
<p>差異同樣真實：文章沒有編譯器、違反原則不會 crash——這決定了執行機制的不同，在「類比的邊界」段展開。</p>
<h2 id="s-單一責任一篇文章一個變動理由">S 單一責任：一篇文章一個變動理由</h2>
<p>程式的 SRP 說一個模組只有一個變動理由。寫作映射：一個寫作單位只承擔一個知識責任、只因一種讀者需求而修改。</p>
<p>判別測試有兩個。<strong>變動理由測試</strong>：這篇文章會因為什麼事件需要更新？獨立事件超過一種、就是拆分候選。<strong>刪除測試</strong>：刪掉某段後文章的核心論證仍完整、該段承擔的就是另一個責任、該路由出去。</p>
<p>實證：一篇企業案例分析初版同時承擔「該公司自身的財報判讀」跟「跨公司結構比較」，兩個責任互相擠壓——案例深度被比較表佔空間、比較內容被鎖在單一公司的敘事裡無法擴充。拆成<a href="/blog/business/financial-analysis/case-studies/bafang-franchise-platform-case/" data-link-title="八方雲集案例分析：自建中央工廠的加盟平台與跨國擴張" data-link-desc="評估「自建中央工廠、全製程控制」型加盟母公司時，用營收事業別拆解、營業槓桿判讀和海外擴張投資風險來檢驗成長敘事的方法">案例篇</a>跟<a href="/blog/business/financial-analysis/franchise-model-structure-comparison/" data-link-title="加盟餐飲母公司結構比較：食材供應模式如何決定獲利結構" data-link-desc="比較同產業加盟母公司時，用食材供應模式（自建工廠 vs 關係企業採購 vs 外部代工）作為結構分類的起點，拆解毛利率、品牌集中度、展店策略和估值差距的成因">比較篇</a>後、兩邊各自深化（詳見 <a href="/blog/report/article-srp-split-comparison-from-case/" data-link-title="案例文章跟跨公司比較是兩個分析責任" data-link-desc="案例分析文章裡嵌了跨公司結構比較時，兩個責任互相擠壓——案例深度被比較段佔空間、比較段被鎖在單一公司的脈絡裡無法擴充；拆成各自獨立的文章後兩邊都能深化">#231 案例文章跟跨公司比較是兩個分析責任</a>）。知識卡的「一卡一概念」是 S 在原子層的同一條原則。</p>
<p>違反訊號：更新 A 議題時被迫重讀整篇 B 內容；兩篇文章互相解釋對方的主題；段落放錯位置時的處理是路由到該去的地方、把刪除當成唯一選項會丟失內容（見 <a href="/blog/report/misplaced-content-needs-route-not-deletion/" data-link-title="不屬於這篇文章的內容要找出路、不是刪除" data-link-desc="Review 發現文章裡有不屬於當前主題的段落時，正確動作是幫這段內容找到該去的地方（另一篇文章、新文章、新分類），不是直接刪除。SRP 違反是路由訊號。">#212 SRP 違反是路由訊號</a>）。</p>
<h2 id="o-開放封閉對擴充開放對重寫封閉">O 開放封閉：對擴充開放、對重寫封閉</h2>
<p>預期會成長的結構、設計成「新增用追加的、既有內容維持穩定」。這條原則的寫作實作是<strong>擴充點設計</strong>：比較表的比較軸、索引的表格結構、系列的骨架——這些是穩定結構、成長發生在往裡面加行加篇。</p>
<p>實證：<a href="/blog/business/financial-analysis/franchise-model-structure-comparison/" data-link-title="加盟餐飲母公司結構比較：食材供應模式如何決定獲利結構" data-link-desc="比較同產業加盟母公司時，用食材供應模式（自建工廠 vs 關係企業採購 vs 外部代工）作為結構分類的起點，拆解毛利率、品牌集中度、展店策略和估值差距的成因">加盟餐飲結構比較</a>獨立成篇時、比較軸（食材供應模式 / 獲利結構 / 品牌集中度 / 展店策略 / 估值）就是擴充點——之後加入第三家公司只在既有軸加行、任何案例文章都保持穩定。知識卡體系同樣：新文章引用既有卡、卡不需要為新文章修改。</p>
<p>邊界是這條原則最重要的部分：<strong>O 管結構骨架、內容不在管轄範圍</strong>。把 O 推到內容層會變成「所有案例共用同一模板」——這直接牴觸情境優先於模板的寫作原則（AGENTS.md 原則八）。案例敘事、失敗條件、回退路徑依各自情境重寫；守 O 的只有表格軸、索引結構、系列骨架這些擴充點。</p>
<p>違反訊號：每次加新內容都要回頭改動多篇既有文章；比較內容散落在多篇案例文章裡、加新比較對象時不知道改哪篇。</p>
<h2 id="l-替換性同類文章對讀者履行同一契約">L 替換性：同類文章對讀者履行同一契約</h2>
<p>程式的 LSP 說子型別可以替換父型別而不破壞呼叫者的預期。寫作映射在讀者預期層、有兩個檢查面。</p>
<p><strong>介面對實作</strong>：title、description、index hook 是介面、內文是實作——讀者依承諾進入、內文必須履行。description 承諾「批判性分析」、內文就要有批判檢驗、單純的公司簡介違約。<strong>同類對同類</strong>：同一個索引分類下的文章（例如「實作案例篇」）對讀者履行同型的功能契約——讀者讀過一篇案例分析、對下一篇的功能預期（有定位、有判讀、有紅旗、有可遷移框架）應該成立。契約是功能層承諾、模板是結構層複製、L 要求前者。</p>
<p>實證：<a href="/blog/report/metadata-surface-in-writing-review/" data-link-title="Metadata surface 要納入寫作 review 範圍" data-link-desc="寫作 review 的 surface 包含正文與 metadata surface：title、description、frontmatter、heading、link label、MOC 索引條。正文通過 positive wording 或 multi-pass review 只代表 body surface 收斂；讀者入口與索引入口也要跑同一套 frame，才能讓文章在第一眼、搜尋與跨篇路由上維持同一個概念錨點。">#97 Metadata surface 要納入寫作 review</a>——正文已改新 frame、title 跟 MOC hook 保留舊 frame、介面跟實作脫鉤；<a href="/blog/report/summary-compression-preserves-modality/" data-link-title="摘要壓縮可以丟細節、不可以改模態" data-link-desc="description、索引 hook、目錄註解這些壓縮層在濃縮規則時、最容易丟失的是約束的模態 — 「可延後、但不可沉默」是帶條件出口的設計、壓成「不可跳過」變成絕對禁令。模態失真比內容遺漏更糟：讀者從壓縮層建立的預期跟本體矛盾、規則的彈性設計（出口、條件、記錄義務）被摘要抹掉。壓縮丟細節是本職、丟模態是失真 — 判準是讀者只依摘要行動、會不會做出本體不要求、或錯過本體允許的事。">#161 摘要壓縮可以丟細節、不可以改模態</a>——description 把本體的「可延後但要記錄」壓成「不可跳過」、讀者依摘要行動就偏離本體。</p>
<p>這是五個映射裡最依賴類比延伸的一條——程式的 LSP 靠型別系統定義、文章的「替換」發生在讀者預期層、沒有機器可驗證的判準。保留它的理由是「介面承諾 vs 實作履行」的檢查在寫作實務反覆出現、上述兩張卡都是這條的實例。</p>
<h2 id="i-介面隔離讀者不被迫消費無關內容">I 介面隔離：讀者不被迫消費無關內容</h2>
<p>程式的 ISP 說 client 不該被迫依賴用不到的方法。寫作映射：不同讀者群透過不同入口進入體系、每條入口只包含該讀者需要的內容。</p>
<p>實作在三個層次。<strong>模組層</strong>是讀者路線表——<a href="/blog/business/financial-analysis/" data-link-title="企業財務分析與投資評估" data-link-desc="從損益表識讀到產業供應鏈分析的系統性商業評估方法——涵蓋報表判讀、公司定位、產業基準、估值方法、外部衝擊判讀，以及真實上市公司的批判性案例分析">企業財務分析模組</a>的三條路線（報表識讀 / 投資評估 / 價值鏈追溯）讓同一批文章對三種讀者呈現三種讀取序列、每條序列跳過該讀者用不到的篇章。<strong>文章層</strong>是視角分段——投資人視角跟加盟主視角各自成段、讀者可以跳過非自身視角的段落。<strong>術語層</strong>是知識卡外移——術語解釋放卡片、需要的讀者點進去、已熟悉的讀者不被打斷。</p>
<p>文章的 I 比程式更嚴苛：程式的 caller 被迫依賴多餘介面、代價是編譯負擔；讀者被迫閱讀無關內容、代價是直接棄讀。</p>
<p>違反訊號：描述目標讀者時需要用「和」連接多個群體、且各群體需要的內容在文中交錯到無法跳讀；讀者要讀完大段無關內容才能到達自己需要的部分。</p>
<h2 id="d-依賴反轉案例依賴方法論方法論不依賴案例">D 依賴反轉：案例依賴方法論、方法論不依賴案例</h2>
<p>程式的 DIP 說高層模組跟低層模組都依賴抽象。寫作映射：具體層（案例文章）依賴抽象層（方法論、知識卡）；抽象層引用具體只作為示例、不作為前提。</p>
<p>依賴方向決定變動傳遞方向。案例更新（財報換季、公司改變策略）不會迫使方法論改寫；方法論修正會提示所有案例重檢——這個不對稱正是體系要的：抽象層穩定、具體層流動。</p>
<p>實證：AGENTS.md 的既有規則「Backend 是語言無關層、各語言章節可連到 Backend 能力、Backend 不反向依賴語言實作」就是 D、先於本文存在。ddd/（方法論精神層）跟 flutter/（語言實作層）的模組拆分同樣路由單向。案例文章引用<a href="/blog/business/financial-analysis/company-stage-model-evaluation/" data-link-title="不同階段與模式的企業評估：從新創到成熟、從產品到代理" data-link-desc="拿到一間公司的財務資料時，依生命週期階段和商業模式類型判斷該優先看哪些指標、哪些基準適用、哪些紅旗最值得警惕的方法">企業評估定位</a>做兩軸分析、方法論篇不需要知道任何一篇案例的存在。</p>
<p>違反訊號：讀方法論篇必須先讀過某篇案例才看得懂（抽象依賴了具體）；修改某篇案例時要回頭改方法論（變動反向傳遞）；方法論的判準用某個案例的特殊條件寫成（過度擬合單一 case）。</p>
<h2 id="類比的邊界">類比的邊界</h2>
<p>映射有三個誠實的限制。</p>
<p><strong>執行機制不同</strong>。程式違反 SOLID 由編譯器、runtime、測試暴露；文章違反由 review 暴露、依賴人或 agent 執行。所以 SOLID 寫作映射必須掛上 review 機制才有效力——multi-round review 的 frame 清單裡、結構軸（責任邊界 / 依賴方向 / 擴充點 / 讀者分流）是一個獨立的檢查 frame。</p>
<p><strong>L 是最弱映射</strong>。型別系統對「可替換」有機器可驗證的定義、讀者預期沒有。L 的寫作版本操作化成「介面承諾 vs 實作履行」的比對——這是它可執行的形式、也是它的極限。</p>
<p><strong>D 不是真正的反轉</strong>。程式的 DIP 核心是控制反轉：高層模組定義抽象介面、低層模組實作它、依賴方向被「倒過來」。寫作映射借不到這一半——方法論沒有定義一個「案例必須實作的介面」、案例也不是被注入方法論的可替換實作。寫作版的 D 實際只保住了 DIP 的一半：依賴無環（案例引用方法論、方法論不回指案例）加上穩定度梯度（抽象層穩定、具體層流動）。用「反轉」命名是取它「變動不反向傳遞」的效果、不是取控制反轉的機制；把它讀成完整的 IoC 會期待一個不存在的介面契約。這一半的缺席也解釋了為什麼 D 的違反只能靠依賴圖檢查（有沒有環、改案例要不要回改方法論）、而不像程式能靠介面型別擋下。</p>
<p><strong>模板化風險</strong>。O 跟 L 都有被過度應用成「統一模板」的風險。判別線：SOLID 管誰承擔什麼責任、依賴往哪走、擴充點在哪——這些是結構；情境敘事、案例語言、失敗條件的描述是內容、依情境重寫。結構原則被拿來否定合理的情境差異時（「這篇的章節跟那篇長得不一樣、不符合 O」）、是誤用訊號、回到情境優先於模板。</p>
<h2 id="跟卡片盒筆記法的分工">跟卡片盒筆記法的分工</h2>
<table>
  <thead>
      <tr>
          <th>層</th>
          <th>方法</th>
          <th>管什麼</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>原子層</td>
          <td>Zettelkasten 卡片</td>
          <td>一卡一概念、卡片連結、原子可重組</td>
      </tr>
      <tr>
          <td>組合層</td>
          <td>SOLID 寫作映射</td>
          <td>文章責任邊界、依賴方向、擴充點、讀者分流</td>
      </tr>
  </tbody>
</table>
<p>S 是兩層的接縫——卡片層的「一卡一概念」跟文章層的「一篇一責任」是同一條原則在不同粒度的形式。體系從卡片長到文章、從文章長到模組時、S 一路適用；O / L / I / D 在多篇文章開始形成體系時才進場。</p>
<h2 id="結構檢查清單">結構檢查清單</h2>
<table>
  <thead>
      <tr>
          <th>情境訊號</th>
          <th>原則</th>
          <th>行動</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>一篇文章有兩種獨立的更新理由</td>
          <td>S</td>
          <td>依變動理由拆篇、各自引用</td>
      </tr>
      <tr>
          <td>完整的跨個體比較表出現在單一個體的文章裡</td>
          <td>S</td>
          <td>比較獨立成篇、案例篇留一句基準引用</td>
      </tr>
      <tr>
          <td>每次加新內容都要改動多篇既有文章</td>
          <td>O</td>
          <td>找出該系列的擴充點（表格軸 / 索引結構）、重設計成加行加篇</td>
      </tr>
      <tr>
          <td>description 或 index hook 跟內文的功能不一致</td>
          <td>L</td>
          <td>對齊介面與實作——改承諾或改內文、二選一</td>
      </tr>
      <tr>
          <td>同分類下的文章功能參差、讀者預期無法遷移</td>
          <td>L</td>
          <td>對齊功能契約（每篇都有定位 / 判讀 / 框架）、結構仍依情境自由</td>
      </tr>
      <tr>
          <td>目標讀者要用「和」連接、內容交錯無法跳讀</td>
          <td>I</td>
          <td>拆讀者路線、或文章內視角分段</td>
      </tr>
      <tr>
          <td>讀方法論要先讀某案例才懂</td>
          <td>D</td>
          <td>方法論改用自包含的通用示例、案例降級為選讀連結</td>
      </tr>
      <tr>
          <td>修案例要回頭改方法論</td>
          <td>D</td>
          <td>檢查方法論是否過度擬合該案例、把特殊條件還原成通用判準</td>
      </tr>
  </tbody>
</table>
<p>檢查時機有兩個：新文章動筆前（決定它的責任邊界跟依賴方向）、系列成長到出現結構張力時（加新內容變得越來越貴、就是結構 review 的訊號）。</p>]]></content:encoded></item><item><title>術語解釋分層方法論：基線宣告與行內 / 連卡 / 裸用三級</title><link>https://tarrragon.github.io/blog/record/term-explanation-layering-methodology/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/record/term-explanation-layering-methodology/</guid><description>&lt;p>專業領域的分析文章面對一個術語密度問題：財會名詞（EPS、關係人交易、營業槓桿）對專業讀者是背景常識、對缺經驗的讀者是理解障礙。直覺的解法是用文章難度控制解釋量——入門篇多解釋、深度篇少解釋。這個直覺方向正確、但需要兩個修正才能操作：&lt;strong>控制變數要從主觀的「難度」換成顯式宣告的「前置知識基線」；遞減的只有行內解釋、連卡密度不隨深度遞減&lt;/strong>。修正後的方法把「解釋」從有無問題變成位置問題——解釋永遠存在、差別在它住在正文裡、知識卡裡、還是基線的前置文章裡。&lt;/p></description><content:encoded><![CDATA[<p>專業領域的分析文章面對一個術語密度問題：財會名詞（EPS、關係人交易、營業槓桿）對專業讀者是背景常識、對缺經驗的讀者是理解障礙。直覺的解法是用文章難度控制解釋量——入門篇多解釋、深度篇少解釋。這個直覺方向正確、但需要兩個修正才能操作：<strong>控制變數要從主觀的「難度」換成顯式宣告的「前置知識基線」；遞減的只有行內解釋、連卡密度不隨深度遞減</strong>。修正後的方法把「解釋」從有無問題變成位置問題——解釋永遠存在、差別在它住在正文裡、知識卡裡、還是基線的前置文章裡。</p>
<p>本文依賴 <a href="/blog/record/solid-writing-methodology/" data-link-title="SOLID 寫作方法論：程式結構原則在文章體系的映射" data-link-desc="文章、模組、系列的結構決策（該不該拆篇、擴充點放哪裡、引用往哪個方向、讀者怎麼分流）缺乏統一判準時，用 SOLID 原則的寫作映射做結構檢查；含五原則的寫作定義、實證案例、違反訊號與類比邊界">SOLID 寫作方法論</a>的組合層框架、是它在術語層的應用。</p>
<h2 id="難度曲線假說的檢驗">難度曲線假說的檢驗</h2>
<p>「難度低多解釋、難度高少解釋」的假說有一個成立面跟兩個問題面。</p>
<p>成立面：行內解釋（在正文用一兩句定義術語）打斷所有讀者的閱讀流、對已熟悉術語的讀者是純成本。深度分析的目標讀者大多已具備基礎詞彙、行內解釋量隨深度遞減是合理的。</p>
<p>問題一：「難度」是主觀推導、寫作時無法檢查。同一篇文章對財務背景讀者是入門、對工程師是進階——難度是「文章假設讀者已有什麼」的衍生感受、可操作的是那個假設本身。把假設顯式化成<strong>前置知識基線</strong>（本文預設讀者已具備哪些詞彙）、難度就從 vibes 變成可宣告、可檢查的 fact。</p>
<p>問題二：「少解釋」如果操作成「裸用術語」、會切斷空降讀者（從搜尋直達深度篇、跳過前置路線的讀者）的回路。知識卡系統讓「少解釋」有第二種操作：正文用術語、連結到卡片——專業讀者不被打斷（連結可以不點）、缺經驗讀者一跳可達。所以深度篇遞減的是行內解釋、連卡密度維持。</p>
<h2 id="明確定義">明確定義</h2>
<h3 id="術語處理的三級">術語處理的三級</h3>
<table>
  <thead>
      <tr>
          <th>級別</th>
          <th>做法</th>
          <th>讀者成本</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>行內展開</td>
          <td>正文給 1-2 句定義（可同時連卡）</td>
          <td>所有讀者都付閱讀成本</td>
      </tr>
      <tr>
          <td>連卡</td>
          <td>正文直接用術語、連到知識卡</td>
          <td>需要的讀者點進去、熟悉的讀者不中斷</td>
      </tr>
      <tr>
          <td>裸用</td>
          <td>直接用、既不解釋也不連</td>
          <td>零成本、但對基線外讀者是斷點</td>
      </tr>
  </tbody>
</table>
<h3 id="判定兩軸">判定兩軸</h3>
<h4 id="軸一術語在本文的角色">軸一：術語在本文的角色</h4>
<ul>
<li><strong>主線</strong>——本文的核心論證繞著它轉、或本文就是在教它（例：營業槓桿之於一篇拆解「營收 +9.5% 為何淨利 +42%」的案例分析）</li>
<li><strong>支撐</strong>——論證用到、但本文不負責教（例：P/E 之於同一篇案例分析）</li>
<li><strong>背景</strong>——順帶出現、換掉措辭不影響論證</li>
</ul>
<p>角色不靠語感判、用兩個機械測試落位，避免這一軸停在維度清單。<strong>黑箱測試分主線與支撐</strong>：讓讀者把這個術語當黑箱（只知道名字加一句話結論、不懂內部機制），還跟得上本文的核心論證嗎——跟得上是支撐或背景（結論代入即可），跟不上是主線（論證繞著它的機制轉、不展開就斷線）。<strong>刪除測試分支撐與背景</strong>：把這個術語整個拿掉，論證有沒有少一個環節——少一環是支撐（論證引用了它的結論）、毫無影響是背景（純措辭）。兩個測試串起來就是角色軸的判定順序：先問黑箱測試分出主線，再對非主線的問刪除測試分出支撐與背景。</p>
<h4 id="軸二術語相對於本文宣告的基線">軸二：術語相對於本文宣告的基線</h4>
<p>基線的操作化定義：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">本文基線 = 模組讀者定位聲明 ∪ 讀者路線中位於本文之前的篇章所教的主線術語</span></span></code></pre></div><p>模組讀者定位是基線起點（例：財務分析模組的起點定位是「工程背景、第一次看財報」）；文章在讀者路線中的位置決定基線的累積量——路線第一篇的基線最小、越後段越多術語從「要解釋」轉入「已具備」。</p>
<h3 id="判定矩陣">判定矩陣</h3>
<table>
  <thead>
      <tr>
          <th>術語角色</th>
          <th>基線外</th>
          <th>基線內</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>主線</td>
          <td>行內展開＋連卡</td>
          <td>行內展開（本文就是在教它）</td>
      </tr>
      <tr>
          <td>支撐</td>
          <td><strong>連卡（卡不存在 → 先建卡）</strong></td>
          <td>連卡（預設）或裸用</td>
      </tr>
      <tr>
          <td>背景</td>
          <td>連卡</td>
          <td>可裸用</td>
      </tr>
  </tbody>
</table>
<p>三條推論：</p>
<ol>
<li><strong>主線術語永遠行內展開</strong>、跟文章深度無關——深度文章的「難」該來自論證複雜度、主線名詞裸奔只是斷路。讀者為了主線概念跳出去讀卡、回來時論證已斷線。</li>
<li><strong>「支撐 × 基線外 × 無卡」就是缺卡的精確定義</strong>——這是「需要抽出來成為知識卡」的判定條件、取代「感覺這個詞需要解釋」。</li>
<li>難度曲線的真身：文章越深、越多術語落在基線內、行內解釋自然遞減；連卡是為空降讀者保留的回路、不遞減。</li>
</ol>
<h3 id="同篇密度控制">同篇密度控制</h3>
<p>同一術語在一篇文章內第一次出現時連卡、後續裸用。背景 × 基線內可裸用的設計也是密度控制的一部分——判定矩陣本身防止「每句三個連結」的視覺噪音。</p>
<h2 id="solid-對應">SOLID 對應</h2>
<table>
  <thead>
      <tr>
          <th>原則</th>
          <th>在術語層的形式</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>S</td>
          <td>行內解釋堆太多、深度文章長出「名詞教學」第二責任——抽卡是 S 的路由動作</td>
      </tr>
      <tr>
          <td>O</td>
          <td>知識卡是擴充點——缺卡補卡、既有文章加一個連結即可、不回頭在多篇文章各自補行內解釋</td>
      </tr>
      <tr>
          <td>L</td>
          <td>基線是介面契約的一部分——路線表跟 description 承諾了「誰能讀」、裸用基線外術語是對承諾的違約</td>
      </tr>
      <tr>
          <td>I</td>
          <td>三級處理就是解釋的讀者分流——行內（全體付費）/ 連卡（選擇性消費）/ 裸用（零成本）</td>
      </tr>
      <tr>
          <td>D</td>
          <td>裸用基線外術語 = 未宣告依賴（讀者需要的知識沒有宣告來源）；連卡把依賴顯式化、方向正確（文章 → 卡）</td>
      </tr>
  </tbody>
</table>
<p>D 的對應值得展開：一篇文章裸用「非控制權益」、等於它依賴一個沒有住址的知識——讀者卡住時沒有官方回路、只能離開文章去搜尋（可能找到口徑不一致的解釋）。連卡把這個依賴變成宣告過的邊：文章 → 卡、卡不依賴文章、卡的內容更新時所有引用文章自動受益。</p>
<h2 id="反向驗證">反向驗證</h2>
<p><strong>全連卡會不會更簡單？</strong>（取消矩陣、所有術語一律連卡）——主線術語只連卡會斷論證線（推論一）、背景 × 基線內連卡是純噪音。矩陣的存在理由是這兩端、中間段（支撐術語）確實預設連卡。</p>
<p><strong>基線宣告會不會擋掉空降讀者？</strong>——基線管的是行內解釋量、連卡管空降可達性、兩個機制獨立。空降讀者落在深度篇、遇到基線內術語仍有卡片回路（前置篇章教過的主線術語本身就該有卡）。</p>
<p><strong>「最不熟悉的讀者」建卡判準跟基線會不會矛盾？</strong>——建卡判準（<a href="/blog/report/common-knowledge-is-relative-to-reader-background/" data-link-title="常識是相對於讀者背景的、不是作者背景的" data-link-desc="知識卡的建卡判準不能用「這個夠不夠常見」——對 PHP 工程師是常識的 .htaccess，對 Node.js 工程師完全陌生；對後端工程師是常識的 DNS TTL，對前端工程師需要解釋。建卡看的是目標讀者群裡最不熟悉的那個人能不能理解，不是作者自己覺得夠不夠普遍。">常識是相對於讀者背景的</a>：目標讀者群裡最不熟悉的那端能不能理解）決定<strong>卡該不該存在</strong>、基線決定<strong>文章對卡的引用形式</strong>。兩者作用在不同層：卡的存在服務整個讀者群的最弱端、文章的處理級別服務該篇的定位。矩陣讓兩者相容：基線內術語仍然有卡（服務空降）、只是文章端可以裸用。</p>
<h2 id="實測financial-analysis-模組掃描">實測：financial-analysis 模組掃描</h2>
<p>對 <code>content/business/financial-analysis/</code>（40 篇）掃描高頻財會術語、比對 <code>knowledge-cards/</code>（55 張）的覆蓋：</p>
<table>
  <thead>
      <tr>
          <th>術語</th>
          <th>出現篇數</th>
          <th>卡片現況</th>
          <th>判定</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>毛利率</td>
          <td>30</td>
          <td>gross-margin 已存在</td>
          <td>已覆蓋</td>
      </tr>
      <tr>
          <td>EPS</td>
          <td>18</td>
          <td>缺</td>
          <td>支撐 × 基線外高頻——建卡第一優先</td>
      </tr>
      <tr>
          <td>營業利益率</td>
          <td>15</td>
          <td>缺</td>
          <td>建卡（跟毛利率 / 淨利率成三率系列）</td>
      </tr>
      <tr>
          <td>折舊 / 攤提</td>
          <td>13 / 5</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>關係人交易</td>
          <td>11</td>
          <td>缺（現多連到長文）</td>
          <td>建卡——現況連文章、原子卡更精準</td>
      </tr>
      <tr>
          <td>P/E 本益比</td>
          <td>10+3</td>
          <td>缺（valuation-band 是鄰卡）</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>損益表</td>
          <td>16</td>
          <td>pnl 已存在</td>
          <td>已覆蓋</td>
      </tr>
      <tr>
          <td>淨利率</td>
          <td>9</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>同店銷售</td>
          <td>9</td>
          <td>缺（現連 industry 長文）</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>市值</td>
          <td>8</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>現金流量表</td>
          <td>7</td>
          <td>缺（free-cash-flow 是鄰卡）</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>應收帳款</td>
          <td>7</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>殖利率 / 配息率</td>
          <td>6 / 2</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>合併報表 / 非控制權益</td>
          <td>5 / 3</td>
          <td>缺（parent-attributable-income 是鄰卡）</td>
          <td>建卡（拆兩張、互連）</td>
      </tr>
      <tr>
          <td>減損</td>
          <td>5</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>轉移定價</td>
          <td>4</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>質押</td>
          <td>3</td>
          <td>缺</td>
          <td>建卡</td>
      </tr>
      <tr>
          <td>營業槓桿</td>
          <td>2</td>
          <td>缺</td>
          <td>主線術語（案例分析的核心機制）——建卡</td>
      </tr>
  </tbody>
</table>
<p>掃描揭露的模式：<strong>方法論長文存在、原子卡缺席</strong>。「關係人交易」有整篇長文深入分析、文章引用時連到長文——依賴有宣告（比裸用好）、但讀者只想要 30 秒定義時被丟進一篇 200 行的文章。修法是建原子卡、卡內連長文作深讀路徑——卡答「這是什麼」、長文答「怎麼判讀」。</p>
<h3 id="單篇-demo八方雲集案例分析">單篇 demo：八方雲集案例分析</h3>
<p>用判定矩陣對一篇實際文章逐術語判定（該文位於價值鏈追溯路線第四篇、基線含報表識讀路線的三率詞彙）：</p>
<table>
  <thead>
      <tr>
          <th>術語</th>
          <th>角色</th>
          <th>基線</th>
          <th>矩陣判定</th>
          <th>現況 vs 應然</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>營業槓桿</td>
          <td>主線</td>
          <td>外</td>
          <td>行內展開＋連卡</td>
          <td>行內已展開、卡缺——建卡後補連</td>
      </tr>
      <tr>
          <td>毛利率</td>
          <td>支撐</td>
          <td>內</td>
          <td>連卡</td>
          <td>已連 gross-margin、合規</td>
      </tr>
      <tr>
          <td>關係人交易</td>
          <td>支撐</td>
          <td>外</td>
          <td>連卡</td>
          <td>現連長文、建卡後改連卡</td>
      </tr>
      <tr>
          <td>P/E</td>
          <td>支撐</td>
          <td>外</td>
          <td>連卡</td>
          <td>裸用中——缺卡缺連、是矩陣抓到的違規</td>
      </tr>
      <tr>
          <td>配息率</td>
          <td>支撐</td>
          <td>外</td>
          <td>連卡</td>
          <td>裸用中——同上</td>
      </tr>
      <tr>
          <td>同店營收</td>
          <td>支撐</td>
          <td>外</td>
          <td>連卡</td>
          <td>連 industry-benchmarking 長文、建卡後改連卡</td>
      </tr>
  </tbody>
</table>
<p>矩陣在這篇抓到兩個裸用違規（P/E、配息率）跟三個「連長文改連卡」的升級點——判定可重算、每個結論都能從兩軸推出、驗證了定義的可操作性。</p>
<h2 id="執行流程">執行流程</h2>
<p><strong>新文章寫作時</strong>（生成端）：讀者定位聲明步驟加一項——確認本文在讀者路線中的位置、寫下基線範圍；初稿完成後跑一輪術語 pass、對每個專業術語走矩陣、缺卡先建卡再交稿。</p>
<p><strong>存量模組 audit 時</strong>：</p>
<ol>
<li>詞頻掃描（grep 術語清單、按篇數排序）比對卡片目錄 → 缺卡清單</li>
<li>缺卡按「出現篇數 × 支撐角色」排優先序、批次建卡（建卡規範照 AGENTS.md 知識卡片規範：一卡一語意、情境精確命名、鄰卡連結）</li>
<li>新卡登記進卡片目錄 <code>_index.md</code> 的分類表——索引是必經註冊點、不是選配。第一批實跑（financial-analysis 8 張卡）時發現 7 張既有卡從未進索引：卡片正常運作、文章連得到、只有目錄層讀者看不見它們——登記漏了不產生任何錯誤訊號、所以要寫進流程而非依賴記憶</li>
<li>卡建成後回填連結——每篇文章該術語第一次出現處連卡；回填是本流程工作量最大的一步（一個術語可能散在十多篇）、先用 grep 定位各篇第一次出現、逐處判斷角色再連</li>
<li>主線術語檢查：各篇的核心機制詞是否行內展開（矩陣推論一）</li>
</ol>
<h2 id="邊界">邊界</h2>
<p>方法論適用於「有知識卡系統的教學型內容」。缺卡片基礎設施的體系（單篇部落格、無互連的文件）只剩行內 / 裸用二選、矩陣退化成「基線外就行內解釋」。基線的操作化依賴讀者路線表——模組還沒有路線表時、先補路線表（或至少模組讀者定位聲明）、再談基線。work-log 型的事件記錄以自己看懂為準、不適用本矩陣。</p>]]></content:encoded></item></channel></rss>