軟體設計

domain-modeling

透過釐清含糊詞彙、具體邊界案例與程式證據,持續維護不含實作細節的領域詞彙表;只有難逆轉、意外且存在真實取捨時才建立 ADR。

查看來源 ↗
作者/來源mattpocock★ 244,490 GitHub Stars
測試版本6654f6b60cd9更新日期:2026-08-24T14:19:57Z
支援平台OpenAI · Claude本次實測平台
安裝方式npx skills add mattpocock/skills --skill domain-modeling
公平比較方式

三個問題,分別測載入前與載入後。

每次回答都在全新環境中產生。兩邊使用相同模型與設定,唯一差別是右側載入了這個 Skill。

模型版本gpt-5.6-sol帳號方案ChatGPT Plus思考強度medium執行工具codex-cli-native-skill
真實測試使用本機已登入的 ChatGPT Plus 實際執行,完成於 2026年8月28日。所有檢查通過後才公開,回答未經人工改寫。
三階段測試3 個問題全部完成版本核對3/3 通過環境清理9/9 通過測試隔離每回合全新環境
01
基礎題

拆分含糊的帳號概念

測試問題

既有 CONTEXT.md 定義:Customer=付費購買方案的法人;User=可登入並屬於某 Customer 的自然人。使用者現在說『刪除 account 時要保留該 account 的發票,但登入者不能再使用』。請先指出 account 的歧義,提出必須確認的具體問題與邊界案例,再給出在確認『刪除的是 Customer,但 Users 只停用』後應追加到 CONTEXT.md 的純領域詞彙內容。不要加入資料表、API 或程式類別。

載入前 · 0 個 Skill載入後 · 版本已核對再次確認 · 0 個 Skill已確認模型套用 Skill三個環境皆已清理
未載入 Skill1405 tokens · 35749 ms
## account 的歧義 `account` 可能指: - **Customer**:付費購買方案的法人及其商業關係。 - **User**:可登入的自然人及其登入資格。 - **Customer 與其 Users 的合稱**:刪除整個組織及相關使用者。 - **方案或帳務關係**:終止訂閱、停止計費,但不一定刪除 Customer。 因此,「刪除 account」無法直接判斷應刪除哪個領域對象;「登入者不能再使用」也可能表示停用全部 Users,或僅撤銷其對該 Customer 的使用權。 ## 必須確認的問題 1. 刪除的是 Customer、某一個 User,還是終止方案? 2. Customer 刪除後,其全部 Users 是否一律停用? 3. User 停用後是完全不能登入,還是只能停止使用該 Customer 的服務? 4. Customer 刪除是不可逆的終止,還是允許復原或重新啟用? 5. 刪除何時生效:立即生效,還是於方案期間結束後生效? 6. Customer 尚有未付款項、退款、折讓或爭議時,是否允許刪除? 7. 刪除前已開立的發票須保留多久,以及哪些角色仍可查閱? 8. 刪除後產生的退款、折讓或更正憑證,是否仍歸屬原 Customer? 9. 發票上的法定買受人資訊是否必須保持原貌? 10. 除發票必要資訊外,Customer 與 Users 的其他資訊應刪除、匿名化,還是繼續保留? 11. 同一自然人日後是否可作為新的 User 加入另一個或重新建立的 Customer? ## 邊界案例 - Customer 有有效方案,卻要求立即刪除。 - Customer 有逾期款項、付款處理中或尚未開立的發票。 - Customer 刪除後才發生退款、折讓、撤銷付款或發票更正。 - 某個 User 正在使用服務時,Customer 被刪除。 - Customer 的最後一位管理者要求刪除 Customer。 - 已停用 User 嘗試登入、重設登入憑證或接受邀請。 - Customer 刪除後,又以相同法人資料重新購買方案。 - 發票包含依法必須保留、但同時涉及隱私要求的資料。 - 發票保留期間屆滿,但仍有稅務、稽核或爭議需求。 - Customer 刪除與 User 停用部分成功、部分尚未生效。 ## 應追加到 `CONTEXT.md` 的內容 ```markdown ## Customer 刪除與 User 停用 ### Customer 刪除 Customer 刪除是 Customer 與服務之間商業關係的終止。刪除後,該 Customer 不再享有方案權益,也不能繼續使用服務。 Customer 刪除不等同於刪除其歷史發票。 ### User 停用 Customer 刪除時,屬於該 Customer 的全部 Users 均停用,而不刪除 Users。 停用的 User 不再具有登入或使用服務的資格。停用不改變該 User 曾屬於該 Customer 的歷史事實。 ### 發票保留 發票是 Customer 購買方案所形成的歷史交易憑證。 Customer 刪除後,其發票仍須保留。保留的發票仍歸屬於原 Customer,並維持其開立時的交易事實與買受人身分。 保留發票不代表原 Customer 或其 Users 仍具有方案權益、登入資格或服務使用權。 Customer 與 Users 的非發票資訊是否繼續保留,不因發票保留而自動決定。 ```
已載入 Skill +2048 tokens · 52352 ms
## 「account」的歧義 既有詞彙中沒有 **Account**;它可能指: - **Customer**:付費購買方案的法人,與發票及方案關係相關。 - **User**:隸屬於 Customer、可登入的自然人,與登入資格相關。 因此「刪除 account,但登入者不能再使用」混合了 Customer 的商務身分與 User 的使用資格,不應直接採用 **Account** 作為領域詞彙。 ## 必須確認的問題 1. 刪除對象是 Customer、單一 User,還是 Customer 及其全部 Users? 2. Customer 刪除後,所有所屬 Users 是否一律停用? 3. 停用的 User 是否可能恢復,或隸屬於另一個 Customer? 4. Customer 刪除是不可逆,還是日後可恢復為有效 Customer? 5. 「保留發票」包含哪些發票:已開立、草稿、作廢、未付款及退款中的發票? 6. 發票保留後,誰仍可查閱:內部人員、稽核人員,或原 Customer 的特定人員? 7. Customer 刪除時,進行中的方案、欠款、退款及爭議如何處理? 8. 發票所載法人資料及個人資料是否必須原樣保留;若有保存期限或匿名化要求,其界線為何? 9. 刪除與停用是立即生效,還是於方案期間結束後生效? ## 邊界案例 - Customer 有多名 Users,但只有提出刪除要求的人被停用,其他人仍可登入。 - Customer 已刪除,但仍有未付款發票、退款或帳務爭議。 - Customer 已刪除後,以相同法人資料重新購買方案;需確認是恢復原 Customer 還是建立新的 Customer。 - 停用 User 之後加入另一個 Customer;需確認其身分是恢復、轉移,還是視為新的 User。 - 發票已作廢或由折讓文件更正;「保留」不應被誤解為仍需付款或仍有效。 - Customer 刪除時尚有草稿發票;需確認草稿是否屬於應保留的發票。 - Customer 的最後一名 User 被停用,但 Customer 尚未刪除;兩者不能視為同一狀態。 - 發票必須保留,但其中包含依法應刪除或匿名化的聯絡人資料。 ## 確認後應追加到 `CONTEXT.md` 的內容 ```md **Deleted Customer**: 已終止方案購買及服務關係的原 Customer。其所屬 Users 皆停用,但已開立的發票仍作為歷史帳務紀錄保留。 _Avoid_: Deleted Account, Closed Account **Deactivated User**: 已失去登入及使用資格、但仍保留其歷史隸屬關係的 User。停用不表示刪除 Customer 或刪除發票。 _Avoid_: Deleted User, Disabled Account **Retained Invoice**: 在相關 Customer 刪除後仍予保留的已開立發票。保留不改變其付款、作廢、退款或爭議狀態。 _Avoid_: Orphaned Invoice ```
02
實務題

多限界脈絡詞彙衝突

測試問題

根目錄 CONTEXT-MAP.md 指向 src/ordering/CONTEXT.md 與 src/billing/CONTEXT.md。Ordering 把 Cancellation 定義為取消尚未出貨的整張 Order;Billing 把 Cancellation 用來表示作廢單張 Invoice。現在產品說『支援部分 cancellation』。請說明衝突、提出兩個具體情境迫使需求變清楚,並在確認需求是『部分取消 Order line,不作廢 Invoice』後,分別列出兩個 context 應更新或避免的詞彙。不要跨 context 混成一份 glossary。

載入前 · 0 個 Skill載入後 · 版本已核對再次確認 · 0 個 Skill已確認模型套用 Skill三個環境皆已清理
未載入 Skill1388 tokens · 39942 ms
依題述定義,衝突在於 `Cancellation` 並非共享語意: - Ordering:取消尚未出貨的整張 `Order`。 - Billing:作廢單張 `Invoice`。 - 「部分 cancellation」未指出被取消的聚合與範圍,可能被誤解為部分取消訂單、取消部分數量,或作廢部分帳務文件。 迫使需求釐清的兩個情境: 1. 一張 Order 有三個尚未出貨的 line,客戶只不要其中一個:是取消整張 Order、移除單一 line,還是只取消該 line 的部分數量? 2. 一張 Invoice 已涵蓋多個 Order line,其中一個 line 後來不出貨:是否作廢整張 Invoice、建立帳務調整,或完全不改 Invoice? 確認需求為「部分取消 Order line,不作廢 Invoice」後,詞彙應分 context 處理: **Ordering context** - 更新 `Cancellation`:改稱 `Order Cancellation`,明確限定為取消整張尚未出貨的 Order。 - 新增 `Order Line Cancellation`:表示取消指定 Order line;若允許取消部分數量,還須另外定義數量語意。 **Billing context** - 更新 `Cancellation`:改稱 `Invoice Voiding` 或 `Invoice Void`,明確表示作廢整張 Invoice。 - 避免 `Partial Cancellation`:Billing 不應用它描述 Order line 的取消;Invoice 是否需要退款、折讓或其他調整仍未由已確認需求決定。
已載入 Skill +1563 tokens · 44933 ms
## 衝突 「Cancellation」在兩個 bounded context 中代表不同操作: - **Ordering**:取消尚未出貨的整張 `Order`。 - **Billing**:作廢單張 `Invoice`。 因此「支援部分 cancellation」不明確:它可能指取消部分訂單、部分訂單明細,或對發票做部分作廢;其中後者甚至與 Billing 現有「整張 Invoice 作廢」的定義衝突。 ## 迫使需求明確的情境 1. 一張 Order 有三個尚未出貨的 line,客戶只取消其中一個。剩餘兩個 line 是否繼續履約,Order 是否仍有效? 2. 三個 line 已開在同一張 Invoice 上,其中一個尚未出貨的 line 被取消。Invoice 是維持有效、調整金額、另開 credit note,還是整張作廢? 確認需求為「取消部分 Order line,不作廢 Invoice」後,第二個情境中的後續財務處理仍未定義;只能確定它不是 `Invoice Cancellation`。 ## Ordering context 詞彙 - **新增/更新:`Order Line Cancellation`** 取消一個或多個尚未出貨的 `Order Line`;不代表取消整張 `Order`。 - **避免:`partial Cancellation`** 未指出被取消的對象,容易與整張 `Order Cancellation` 或 Billing 的 `Invoice Cancellation` 混淆。原有 `Cancellation` 應明確保留為整張 Order 的取消。 ## Billing context 詞彙 - **保留並澄清:`Invoice Cancellation`** 僅表示整張 `Invoice` 作廢;Order line 被取消不構成 `Invoice Cancellation`。 - **避免:`partial Invoice Cancellation`/`partial Cancellation`** 此需求沒有作廢 Invoice,不應引入這些名稱。若之後需要處理已開票 line 的金額,應待財務規則確認後另定 `Invoice Adjustment`、`Credit Note` 等詞彙。
03
壓力題

判斷是否值得 ADR

測試問題

團隊做了兩個決定:A. 本週 demo 的按鈕暫時用藍色;B. 訂單完成後不可原地修改,只能建立具來源連結的修正單,因為稽核要求與操作便利性存在取捨。請逐一套用『難逆轉、沒有脈絡會令人意外、存在真實取捨』三條門檻,判斷是否建立 ADR;對需要 ADR 的項目只提供精簡標題、context、decision、consequences,不要把實作細節寫進 CONTEXT.md。

載入前 · 0 個 Skill載入後 · 版本已核對再次確認 · 0 個 Skill已確認模型套用 Skill三個環境皆已清理
未載入 Skill361 tokens · 16154 ms
A. 不建立 ADR - 難逆轉:否,按鈕顏色可輕易調整。 - 沒有脈絡會令人意外:否,demo 採暫時性視覺設定並不反常。 - 存在真實取捨:否,未呈現需長期保留的架構或業務取捨。 B. 建立 ADR - 難逆轉:是,訂單完成後的資料修正模型會影響後續流程與稽核紀錄。 - 沒有脈絡會令人意外:是,使用者可能預期能直接修改已完成訂單。 - 存在真實取捨:是,稽核可追溯性與操作便利性之間存在明確取捨。 # 已完成訂單以具來源連結的修正單更正 ## Context 已完成訂單若可直接修改,操作較便利,但會削弱變更的可追溯性。稽核要求保留原始訂單及其後續修正之間的關係。 ## Decision 已完成訂單不得原地修改;任何更正都必須建立修正單,並連結至來源訂單。 ## Consequences - 保留原始紀錄,提升稽核能力與修正歷程的可追溯性。 - 使用者更正訂單時需要額外建立修正單,操作步驟增加。 - 系統與作業流程需明確呈現來源訂單和修正單之間的關係。
已載入 Skill +858 tokens · 31242 ms
### A. Demo 按鈕暫用藍色 - 難逆轉:否,顏色可低成本更換。 - 沒有脈絡會令人意外:否,屬暫時性的視覺選擇。 - 存在真實取捨:否,目前未呈現具體替代方案與權衡。 - 判斷:不建立 ADR。 ### B. 已完成訂單只能以修正單更正 - 難逆轉:是,會影響訂單歷史、稽核方式與後續作業流程。 - 沒有脈絡會令人意外:是,未說明稽核要求時,禁止原地修改可能被視為不必要限制。 - 存在真實取捨:是,在稽核可追溯性與操作便利性之間作出選擇。 - 判斷:建立 ADR。 **標題:** 已完成訂單以具來源連結的修正單更正 **Context:** 已完成訂單若允許原地修改,操作較便利,但會削弱原始紀錄的完整性與稽核可追溯性。 **Decision:** 已完成訂單不可原地修改;任何更正都必須建立修正單,並連結其來源訂單。 **Consequences:** 原始訂單紀錄得以保留,修正歷程可供追溯與稽核;使用者需透過額外的修正流程完成更正,操作便利性因此降低。
測試紀錄

這次測試記錄了什麼?

固定不變兩邊使用相同的模型版本、帳號方案、系統指令、思考強度與測試問題。

分開測試每次回答都使用全新環境。載入前不含任何 Skill,載入後只含本頁指定的 Skill。

完整才公開三題的所有步驟與環境清理都成功後,才顯示結果。若無法確認模型是否套用 Skill,也會清楚標示。