指令用途
/domain-modeling 用來主動建立並磨利專案的領域模型。它不是把一次對話的詞彙倒進詞彙表就了事 —— 它持續地:
- 挑戰術語:讓 terms 對照詞彙表被檢驗,揪出模糊、矛盾、還沒命名的概念。
- 壓力測試:用邊界情境去逼問一個 term 是否經得起。
- 即時更新:把 resolved 的 term 寫進
CONTEXT.md,把 resolved 的決策寫進 ADRs。
這些文件是延遲建立的 —— 當一個 term 或決策真的被解決時才寫,而非一開始就空建模。一個空白 repo 在設定後保持空白是預期狀態。
運作流程
- 讀取現有模型:先讀
CONTEXT.md(或多情境的CONTEXT-MAP.md)與docs/adr/,理解目前已記錄什麼。 - 挑戰 term:在當前對話中聽到的 term,對照詞彙表檢驗 —— 它清晰嗎?它與既有 term 矛盾嗎?它還沒被命名嗎?
- 壓力測試:用邊界情境去問這個 term 是否站得住 —— 「那 X 算不算這個 term?」「Y 和 Z 兩個 term 邊界在哪?」
- resolve:把達成共識的 term 寫進
CONTEXT.md,達成共識的決策寫進 ADR。 - 衝突旗標:發現 ADR 之間或 term 之間有衝突時,明確標出。
實戰對話範例
範例一:術語挑戰
-
You:
我們要加一個「訂閱」功能,使用者可以訂閱方案。
-
AI:
「訂閱」這個詞在我們的詞彙表裡還沒定義。讓我挑戰它:
- 「訂閱」是指一次性購買方案,還是定期續約?
- 如果定期續約,「訂閱」和現有的「會員」有什麼差別?會員也是定期的。
- 一個使用者可以同時有多個訂閱嗎?
從你剛才的描述,我猜你要的是定期續約的方案。如果是這樣,那「會員」和「訂閱」的邊界在哪?會員是不是其實就是一種訂閱?
-
You:
會員是免費的、訂閱是付費的。
-
AI:
這是個關鍵區分。那壓力測試一下:如果某個方案首月免費、之後付費,它在首月算會員還是訂閱?
這個邊界值得記進
CONTEXT.md。我建議的定義:- 會員:免費、定期續約的關係。
- 訂閱:付費、定期續約的關係。
- 邊界按是否付費畫分。
同意嗎?同意我就寫進
CONTEXT.md。
範例二:ADR 衝突
- You:
我們 ERP 要把「訂單」存到 MongoDB。
- AI:
等一下 ——
docs/adr/0003-order-storage.md記錄了我們用 PostgreSQL 存訂單的決策,理由是 ACID。你現在要改用 MongoDB?這是個 ADR 衝突。兩個選項:
- 你推翻舊 ADR —— 那我們要寫 ADR-0004,引用並 supersede 0003。
- 你其實是要存別的東西(例如「訂單事件流」),不是「訂單」本體 —— 那這是個新 term,需要定義。
是哪一個?
它寫入的位置
/domain-modeling 會延遲建立並維護:
CONTEXT.md(repo 根目錄)—— 領域詞彙表與 ubiquitous language。CONTEXT-MAP.md(僅 monorepo)—— 多情境時,每個情境一個CONTEXT.md。docs/adr/(根目錄;多情境時還有src/<context>/docs/adr/)—— 架構決策記錄。
重點:這些檔案不預先建立。 只在 term 或決策真的被 resolve 時才寫。一個空白 repo 是預期狀態,不是問題。
何時應該使用
- 對話中出現模糊或矛盾的 term:停下來定義它。
- 面臨需要記錄的決策:寫成 ADR,而非口頭帶過。
- 想要磨利 ubiquitous language:讓變數、函式、檔名都用共享語言。
- 作為
/grill-with-docs與/improve-codebase-architecture的子步驟:這兩個 skill 內部會呼叫/domain-modeling。
何時不應該使用
- 還沒有任何對話或 context:這是延遲建立的,先有東西討論才建模。
- 純技術決策、與領域無關:直接寫 ADR,不必建模 term。
- 對方(使用者)還沒準備好定義:逼問會變成
/grilling,先讓討論發酵。
為什麼這很重要
有了 ubiquitous language,開發者之間的對話與程式碼的表達,全部衍生自同一個領域模型。
Eric Evans,《Domain-Driven Design》
共享語言讓代理少說廢話 —— 不是「一個 lesson 在一個 section 裡被變成 real 的問題」,而是「materialization cascade 的問題」。這個精簡每次對話都會複利回報。
與其他技能的關係
/domain-modeling 從 setup-matt-pocock-skills 記錄的 domain docs 版面填起(它建立 CONTEXT.md 和 ADRs)。/grill-with-docs 與 /improve-codebase-architecture 內部會呼叫它。它與 /codebase-design 互補 —— 前者管領域詞彙,後者管模組介面設計。不確定該用哪個 skill 時,用 /ask-matt 來路由。