Skip to main content

Command Palette

Search for a command to run...

Event Storming 演練 - 停車場系統 - 下

Published
2 min read

邊界情境

實際做法:

  • 當大家走到「車輛靠近入口 → 辨識 → 進場」的事件時,突然有人問:

    「那如果有人卡在入口不走呢?」

  • 此時 facilitator(主持人)會立刻拿一張粉紅貼紙寫:

      複製編輯🚧 車輛卡在入口太久
    
  • 然後貼在「車輛靠近入口」的旁邊,不急著解決,先繼續主流程。

快速記錄格式(現場慣用)

元素怎麼寫
事件粉紅貼紙,寫「異常行為:XXX」
策略建議藍貼紙,可直接寫「應提示駕駛讓道」
命令建議黃貼紙,可寫「發送通知、記錄異常」

👉 不強求完整性,能留下「問題意識」即可。

會議進行節奏(常見做法)

  1. 先走主流程,重要事件先黏出來

  2. 出現問題→邊緣→立即貼異常,不討論細節

  3. 流程完整後,再回頭處理粉紅貼紙

  4. 邊界情境可延伸成 Hot Spot 討論、風險評估、技術突破設計

邊界情境(Edge Cases)→ 轉化為正式「事件(Domain Events)」的情況


💡 核心原則:

  • 只要一個情境有「業務意義」、會「改變狀態」、或「需要反應」
    👉 它就應該升級為正式的 事件

🚦 停車場案例:從邊界到事件的示範

邊界情境(粉紅貼紙)能否轉為事件?為什麼
車輛長時間佔入口不走✅ 可以轉為事件:「車輛佔入口超時」系統需要反應(提示、通知、控制)
車牌辨識失敗✅ 可以轉為事件:「車牌辨識失敗」需觸發手動模式或人工協助
車輛進場後長期未出場✅ 可以轉為事件:「車輛停留時間過長」可觸發異常計費或管理提醒
繳費後未出場✅ 可以轉為事件:「出場有效期過期」決定是否重新計費或通知
發票開立失敗✅ 可以轉為事件:「發票開立失敗」觸發補救措施
感應器故障✅ 可以轉為事件:「設備異常發生」系統行為需切換或通報

📌 為什麼要轉為事件?

理由說明
🏷 有狀態變化例如:一輛車從「正常停車」→「超時停車」
🔄 需要後續行為例如:需自動扣費、發送通知、變更模式
📊 需要日後追蹤例如:異常統計、營運報表、責任歸屬
⏱ 時間驅動例如:經過 X 分鐘未付款/未出場,都是時間驅動事件

🚀 如何處理這類「從粉紅到橘色」的轉變?

  1. 事件名稱(橘色貼紙):描述「發生了什麼」(過去式

  2. 策略規則(藍色貼紙):描述「應該做什麼」

  3. 行動命令(黃色貼紙):描述「執行什麼行為」


📍 停車場 E1 實例演練:

元素實際內容
Event車輛佔入口超時
Policy系統應提示駕駛並通知管理者
Command顯示提示/發送通知/記錄異常

這樣一來它就變成完整的「業務驅動流程」,而不是一個單純的「提醒」。


✅ 決策準則:何時邊界變事件?

問題結論
有沒有「新狀態」產生?有 → 應該變事件
有沒有「需要反應或處理」?有 → 應該變事件
是否影響到其他業務行為?有 → 應該變事件
是否僅是提醒、告警?是 → 保持粉紅貼紙即可

More from this blog

關於 Hash index

什麼是 Hash Index? Hash Index 是資料庫系統中的一種索引結構,它使用雜湊函數(Hash Function)將索引鍵(Key)映射到資料表中的記錄位置。相較於傳統的 B-Tree 索引,Hash Index 在某些特定查詢場景下能提供更高效的性能。 基本原理 Hash Index 的核心原理是: 使用雜湊函數將索引鍵轉換為雜湊值(Hash Value) 雜湊值決定資料記錄在雜湊表(Hash Table)中的儲存位置 查詢時,系統對索引鍵應用相同的雜湊函數,直接定位到對應...

Jul 26, 20251 min read
關於 Hash index

Event Storming 演練 - 停車場系統 - 上

領域專家口述業務流程 停車場入口會顯示目前停車場剩餘車位,當車輛駛入停車場入口,會先判斷是否有停車位,若是有停車位,車號辨視系統成功取得車號將會放入車輛進入,當感應車輛真的進入後,記錄車輛的車牌與其進入的時間,會將剩餘車位減一。 車輛進入之後,會給於一段緩衝時間,若是車輛在緩衝時間內出場,系統判斷可以正常出場不必繳納停車費用,若超過緩衝時間,即必須這行繳費程序之後再放行。 繳費流程要求在出場之前完成,不會與出場流程一起,繳費時會判斷是否在緩衝時間內,若是,將不必繳費請駕駛人儘快離場,並提醒剩於緩...

Jul 10, 20253 min read

TypeScript - Type 那點事

隨便記 將類型定義放在 .types.ts 或 .d.ts 檔案中,此兩者副檔名有何差異? 在 TypeScript 開發中,.types.ts 和 .d.ts 檔案都用於定義類型,但它們的用途和特性有所不同: .types.ts 用途: 通常用於在 TypeScript 專案內部,定義專案中使用的類型。 這些檔案包含 TypeScript 程式碼,可以包含類型別名、介面、列舉等。 .types.ts 檔案會被 TypeScript 編譯器編譯成 JavaScript 檔案(.js...

Jun 28, 20251 min read

碼農筆記 - 設計思維

Mark it Work, Mark it Right, Mark it Fast 可測試性 可閱讀性 可觀察性 可維護性 可擴展性 健壯性 安全性 效能與資源效率 可部署性 可配置性 🧠 最佳實踐心法 別一開始就追求 Make it Fast,先求穩定,再求優雅,最後才是效能。 重構是常態不是例外,Make it Right 應視為開發常規而非技術債還債。 性能瓶頸來自實測,而不是預測。 Make it Right 意指 程式碼結構清晰 命名具語意 關...

Jun 10, 20251 min read

我的工作筆記

8 posts

雖是全端碼農,主力還是後端功能,php + mysql + redis 使用 Laravel 框架,node + mysql + redis 使用 Adonisjs v5。