軟體架構領域流傳著一句殘酷的真理:「寫程式碼很容易,搞懂業務極其困難;而搞懂業務最大的障礙,不是業務規則深奧,而是大家都以為自己在說同一件事。」

在大部分團隊的會議室裡,經常上演這樣的悲劇對話:

業務總監說:「系統要支援『訂單(Order)』取消。」
工程師點點頭,在 Order 資料表上加上 status = CANCELLED。
兩週後,倉儲主管衝進辦公室破口大罵:「為什麼司機都已經把貨櫃開出物流中心了,系統還允許用戶在 App 上按取消?司機在高速公路上要怎麼把箱子放回架位?」
工程師委屈地說:「但業務說只要訂單未完成都可以取消啊!」
財務長跟著補刀:「更糟糕的是,發票上個月底就已經申報營業稅了,你們在資料庫直接把這筆訂單狀態抹掉,是要讓我去坐牢嗎?」

在這場混亂中,沒有任何人在蓄意破壞系統,每個人都在恪盡職守。這場災難的真正元凶,是系統分析端最普遍也最致命的隱形殺手——同名異義詞(Polysemy)。

「訂單」這個詞,在銷售端、倉儲端與財務端,表面上拼寫完全相同,但在各自的業務現實中,指涉的是完全不同的事物。如果系統分析師在白板前無法抓出這些潛藏在日常對話中的語義衝突,工程團隊就必然會打造出一個欄位破百、到處都是 nullable、無人敢動其狀態機的「上帝物件(God Object)」。

為了解決這個溝通死局,我們需要一套極簡、嚴謹且以微觀時序為核心的圖解語法——Domain Storytelling(領域敘事)。

Domain Storytelling 語法要素與同名異義詞解構全景 頂部展示 Domain Storytelling 三大核心語法要素(Actors、Work Objects、Activities)。主體四欄展示領域敘事從情境講述、同名異義詞暴露、通用語言銳化到限界上下文隔離的提煉流程。底部展示破除全域統一模型幻覺的架構防禦警示。領域敘事三大微觀要素:Actors 參與者(誰)Work Objects 工作物件(什麼)Activities 帶序號活動(做了什麼)STEP 1 · 具體場景講述具體故事拒絕抽象 · 畫出真實流動敘事核心原則一次只講一個具體案例「VIP 客戶退換瑕疵品」真實案例• 邊聽專家講述邊在白板繪製• 箭頭加上嚴格序號(1, 2, 3)• 記錄資訊載體而非底層資料表• 讓業務專家一眼看出哪裡畫錯分析師職責即時圖解 · 驗證業務流動STEP 2 · 語義陷阱捕捉同名異義詞名詞相同 · 現實完全割裂獵殺核心目標同名異義(Polysemy)如「Order」在銷售、倉儲、財務• 銷售口中:Order 是購物車意向• 倉儲口中:Order 是出貨撿料單• 會計口中:Order 是應收帳款憑證• 強行揉合必然誕生 God Object分析師職責揭露分歧 · 標註語義撕裂STEP 3 · 語義提純提煉通用語言一詞一意 · 拒絕模稜兩可通用語言交付精準概念替換放棄萬能名詞,賦予純淨命名• 銷售端重命名為 SalesOrder• 倉儲端重命名為 DispatchOrder• 財務端重命名為 Invoice• 每個名詞定義專屬狀態不變量分析師職責精確命名 · 編寫領域詞典STEP 4 · 邊界確立劃定語義邊界各司其職 · 消除全局依賴架構防線落實獨立 Bounded Context各自擁有高內聚的小模型• 徹底杜絕 Nullable 欄位膨脹• 狀態機單純清晰,無跨界污染• 跨邊界僅透過 ID 與契約傳遞• 程式碼與業務溝通完全零摩擦分析師職責界定邊界 · 杜絕大泥球i系統分析師的核心警醒:拒絕「全局單一真實模型(Single Source of Truth)」的幼稚病語義是局部的: 沒有任何一個資料模型能夠在整間企業的所有部門中維持相同意義;試圖統一一切名詞,只會製造出誰都不敢維護的上帝實體。故事驅動邊界: 用具體的故事場景迫使隱藏在名詞背後的真實業務動作無所遁形,才是定義通用語言的唯一工程路徑。 Domain Storytelling 語義提煉四步工作流(行動版) 領域敘事四步驟縱向卡片版:講述具體故事、捕捉同名異義詞、提煉通用語言、劃定純淨限界上下文邊界。Domain Storytelling 領域敘事從微觀業務故事抓出同名異義與語義邊界STEP 1 · 具體場景(拒絕抽象)講述具體故事(Concrete Stories)要素:Actors + Work Objects + Activities• 特徵:邊聽專家講述邊在白板畫出帶序號箭頭• 姿態:一次只講一個特定場景,不談泛化規則• 典型:「Alice 透過客服系統為訂單申請換貨」分析師姿態:即時視覺化圖解,驗證業務真實流動STEP 2 · 語義陷阱(名詞撕裂)捕捉同名異義詞(Polysemy)陷阱:同一個詞在不同部門代表完全不同現實• 特徵:業務口中的 Order 只是意向,倉儲口中是撿料單• 姿態:敏銳辨識跨故事流轉時工作物件的內涵突變• 典型:試圖在資料庫建單一 Order 表必然製造上帝物件分析師姿態:拒絕統一全域模型,揪出語義分歧STEP 3 · 語義提純(一詞一意)提煉通用語言(Ubiquitous Language)產出:精準概念替換與詞典定義• 特徵:拆分為 SalesOrder、DispatchOrder、Invoice• 姿態:每個名詞擁有毫無歧義的不變量與生命週期• 典型:程式碼類別名稱與業務對話 100% 一對一完全映射分析師姿態:終結曖昧定義,建立精確邊界字典STEP 4 · 邊界確立(架構解耦)確立限界上下文(Bounded Contexts)交付:獨立小模型與架構防線• 特徵:每個 Context 內部模型高度精簡,無 Nullable 污染• 姿態:跨上下文僅傳送純 ID,杜絕跨模組強依賴• 典型:銷售、履約與財務各自獨立演進,互不拖累分析師姿態:以清晰邊界終結大泥球,架構自然落地💡 語義局部性原則:放棄全域統一模型幻想;一詞一意,邊界內純淨自洽。
圖解:Domain Storytelling(領域敘事)從具體微觀業務故事中識別同名異義詞(Polysemy),提煉通用語言並確立純淨限界上下文邊界的工作流。

破除幻想:為什麼「全局統一數據字典」是致命毒藥?

許多傳統架構師試圖用「企業級全域資料模型(Enterprise Data Model)」來解決語義混亂:由架構委員會召集所有部門,花費幾個月編寫一本厚重的《全公司統一資料字典》,規定全公司所有的「Order」都必須統一採用標準定義與單一資料表結構。

這是一種典型的幼稚病。

現實商業世界本質上是由多個各自具備不同目標、不同時間尺度與不同約束的「子語境」所組成的。

  • 對行銷部門而言,訂單是**「消費意向與優惠券套用結果」**;
  • 對物流中心而言,訂單是**「實體貨物的重量、體積、揀貨路徑與包裝箱編號」**;
  • 對會計稅務而言,訂單是**「具備法律效力的權責發生制憑證」**。

試圖強行用單一資料模型統攝所有部門的認知,下場只有兩個:

  1. 模型肥大化與語義撕裂:一個實體承載了幾十個互不相關部門的私有屬性,任何一個業務流程的微調都會意外觸發其他部門的驗證錯誤;
  2. 表面一致,私下脫軌:各部門發現集中式系統根本無法滿足自己的彈性需求,於是私底下開始用 Excel、Google Sheet 或自建小影子系統來記錄真正的業務資料。

Eric Evans 在 DDD 經典中提出最核心的智慧正是:「通用語言(Ubiquitous Language)不是全域的,它只在特定的限界上下文(Bounded Context)內部具備絕對嚴格的單一含義。」

而 Domain Storytelling,就是一套專門用來**「在具體故事中逼出語義分歧、劃定上下文邊界」**的手術刀。


Domain Storytelling 的極簡圖解語法

Domain Storytelling 由 Stefan Hofer 與 Henning Schwentner 提出,其核心哲學是:「人類天生擅長講故事與聽故事。」

比起抽象的 UML 類別圖或資料流圖,業務專家更願意用「誰、拿著什麼、對誰做了什麼」來還原工作場景。其語法極其精簡,僅包含三個微觀要素:

1. 參與者(Actors)

在故事中主動發起行為的人、組織角色或軟體系統。
圖解上通常以簡單的小人形圖示(代表內部員工、外部客戶)或電腦圖示(代表既有軟體系統、外部服務網關)表示。

2. 工作物件(Work Objects)

參與者在協同作業過程中所傳遞、查閱、修改或產生的資訊載體或實體物品。
例如「採購清單」、「紙本驗收單」、「動態報價單」、「物流運單」。工作物件絕不是資料庫裡的資料表,而是業務專家眼前真實看見或操作的具體事物。

3. 活動(Activities)與序號箭頭

參與者之間對工作物件所採取的動作,用一根帶有方向的箭頭連接,箭頭上方以「動詞短語」描述動作,並且必須標註從 1 開始遞增的阿拉伯數字序號(1, 2, 3…)。

透過這三個元素,一個原本極度複雜的跨部門退換貨流程,就可以在白板上被還原為一句句具體的時間序列句子:

  • 1. [客戶] 向 [客服人員] 提交 [瑕疵照片與訂單編號]
  • 2. [客服人員] 在 [客服系統] 建立 [換貨申請案件]
  • 3. [客服系統] 向 [倉庫主管] 發送 [瑕疵品待檢通知]
  • 4. [物流司機] 將 [實體瑕疵包裹] 運抵 [檢驗隔離區]

系統分析實戰:用領域敘事提煉通用語言的四個步驟

在實際系統分析會議中,系統分析師應當如何引導業務專家與工程師完成語義提煉?

第一步:講述具體場景故事(Concrete Scenarios)

永遠禁止業務專家做「抽象的概括性發言」(例如:「我們通常會審核訂單」)。
系統分析師必須強勢追問具體案例:「請拿昨天下午發生的那起最棘手的『VIP 用戶跨國取消換貨』為例,具體是哪位客服、打開了什麼畫面、看見了什麼、做了什麼?」

分析師一邊聽專家講述,一邊在白板上同步畫出帶序號的圖形。每畫完一段,立刻指著圖表向業務專家覆述:「所以步驟 4 是司機把包裹送給驗收員,而不是系統自動通知入庫,對嗎?」
因為圖形極其直觀,業務專家能在一秒內指出認知偏差:「不對,驗收員根本看不到包裹,是倉儲工讀生先拆箱分類!」這瞬間消滅了傳統規格書中數週後才會暴露的盲點。

第二步:獵殺同名異義詞(Polysemy Hunting)

當分析師畫了三個不同的故事(「日常快速下單發貨故事」、「大檔期庫存預購故事」、「瑕疵品換貨退款故事」)後,將三張圖並排貼在白板上,開始進行**「名詞跨故事比對」**。

仔細審視「工作物件(Work Object)」在跨越不同參與者時的內涵變化:

  • 在《下單故事》中,消費者提交的 Order,裡面只包含商品 ID、購買數量與外送地址;
  • 在《倉庫故事》中,倉管人員看見的 Order,卻變成了包含貨架編號(A-12-04)、揀貨路徑、外箱容積計算的撿料單;
  • 在《財務故事》中,會計人員審核的 Order,關心的卻是統一編號、免稅額度、沖銷憑證與銀行手續費拆帳。

分析師此時要在白板上敲響警鐘:「各位請看,這三個故事裡的『Order』根本不是同一個東西!如果在資料庫裡把它們建在同一張表,我們就是在為系統埋下未爆彈。」

第三步:銳化為通用語言(Sharpen Ubiquitous Language)

抓出同名異義詞後,系統分析師的下一個動作是**「消滅模糊名詞,進行精準概念替換」**:

  • 放棄籠統的萬能名詞 Order;
  • 在銷售溝通中,將其正式命名為 SalesOrder(銷售意向訂單);
  • 在物流溝通中,將其重命名為 PickList(揀料單) 或 FulfillmentJob(履約派工單);
  • 在財務溝通中,將其重命名為 CommercialInvoice(商業發票憑證)。

透過這種精確命名,業務專家、產品經理與工程師在未來的所有對話中,不再使用模糊的「那個 Order 狀態改一下」,而是精確地討論「PickList 已經鎖定出庫,因此無法直接撤銷 SalesOrder,必須發起逆向物流補償流程」。

第四步:確立純淨的限界上下文(Bounded Context Boundaries)

當名詞與職責被銳化後,限界上下文的物理接縫自然確立:

  • 銷售上下文(Sales Context): 專注於購物車轉換、行銷促銷計算,維護小巧純淨的 SalesOrder 模型。
  • 履約上下文(Fulfillment Context): 專注於物理庫存鎖定、批次撿料、路線規劃,維護自己的 PickList 與 Shipment 模型。
  • 結算上下文(Billing Context): 專注於稅法合規、雙式記帳、金流扣款,維護嚴謹的 Invoice 與 PaymentReceipt 模型。

各上下文內部只有自己領域的純淨名詞與業務不變量。跨模組溝通時,不再傳遞龐大的實體資料表,而僅透過純粹的 ID(例如 SalesOrderId)進行異步事件通知。


系統分析交付物:領域詞典與場景矩陣

經過 Domain Storytelling 提煉後,系統分析端輸出的不再是幾十頁無人翻閱的 PRD,而是一套精簡且可被代碼嚴格落地的資產:

1. 結構化領域詞彙表(Domain Glossary)

為每一個劃定好的 Bounded Context 建立獨立字典:

  • 邊界名稱:履約上下文(Fulfillment Context)
  • 通用詞彙:PickList(揀料派工單)
  • 精確業務定義:指派給特定倉庫撿料員的一組實體商品 SKU 與貨架座標組合,一旦被撿料員掃碼認領,即進入凍結鎖定狀態。
  • 絕對不包含之概念:不包含用戶信用卡交易狀態,不包含促銷折扣折抵金額。

2. 微觀場景故事圖(Scenario Storyboards)

保留帶有編號的 SVG/圖解故事板,直接存放在代碼庫的模組目錄下(例如 docs/domain-stories/fulfillment-dispatch.svg)。當新工程師或 AI Coding Agent 進入代碼庫時,這張故事圖就是最高權威的「架構業務契約」。


下一步:將業務分析封裝為架構契約

透過 Wardley Mapping,我們錨定了不可替代的核心域;
透過 Big Picture EventStorming,我們梳理了全域事件時序並圈定了候選邊界;
透過 Domain Storytelling,我們抓出了微觀故事中的同名異義詞,提煉出了純淨的通用語言。

現在,系統分析的所有拼圖已經完整齊備。我們該如何將這些分析產出,轉化為架構師、技術主管與工程團隊可以直接簽字確認、並作為系統通訊拓撲最高規範的標準交付物?

在下一篇(本系列完結篇)中,我們將深入最後的戰略交付神器:《從業務分析到架構契約:Bounded Context Canvas 的規格交付與通訊拓撲》,拆解如何用一張畫布,完成微服務/模組化單體的邊界封裝與通訊協定設計。