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

李卡爾李卡爾
3 min read

領域專家口述業務流程

停車場入口會顯示目前停車場剩餘車位,當車輛駛入停車場入口,會先判斷是否有停車位,若是有停車位,車號辨視系統成功取得車號將會放入車輛進入,當感應車輛真的進入後,記錄車輛的車牌與其進入的時間,會將剩餘車位減一。

車輛進入之後,會給於一段緩衝時間,若是車輛在緩衝時間內出場,系統判斷可以正常出場不必繳納停車費用,若超過緩衝時間,即必須這行繳費程序之後再放行。

繳費流程要求在出場之前完成,不會與出場流程一起,繳費時會判斷是否在緩衝時間內,若是,將不必繳費請駕駛人儘快離場,並提醒剩於緩衝時間,緩衝時不會因此展延,如果緩衝時間是 15 分鐘,在第 14 分鐘進行繳費,雖然不必繳費,但會告知駕駛人剩餘不到一分鐘,以此類推。

繳費時計算費用,系統判斷規格,會有半小時或一小時計費制,並且有每天上限或無上限制,比如每半小時 20 元,每天最高上限 160 元,當計算費用完成,請駕駛者繳費,繳費提供多種付款方式,以需求進行擴充,比如現金、apple pay、 line pay 等多元付款方式,當付款完成後依場地規劃須開立發票或不須開立,若開立發票,支援電子式,或是電子發票,電子發票可支援載具、愛心碼相關規則。

付款後有緩衝時間,駕駛者必須在緩衝時間內離場,若超過,將重新計費並進行繳費,車輛正式出場後記錄離開時間,並將剩餘車位加一。

若是停車場發生異常需要通知管理者線上處理,系統可以通知管理者,管理者可以遠端處理車停進出管理,比如收費系統異常,管理者可以設定車輛暫時停止進入或開放免付費進出,若進出場記錄仍然可以正常運作,仍然必須記錄。

精煉版業務流程摘要(供Event Storming)

  • 進場流程:顯示剩餘車位 → 車輛靠近 → 辨識車號 → 判斷是否可入場 → 放行 → 感應進入 → 減一車位 → 記錄車牌、進場時間。

  • 免費緩衝:進場後啟動免費緩衝 → 緩衝內出場 → 不須付費 → 記錄出場。

  • 繳費流程:超過緩衝 → 繳費 → 支付多元 → 發票/不發票 → 通知剩餘時間。

  • 出場流程:付款後啟動有效出場時間 → 感應離場 → 加一車位 → 記錄。

  • 異常處理:設備異常 → 通知管理者 → 遠端控制 → 記錄行為與結果。

Domain Events

這些是「發生過的、不可改變的事實」。

  1. 🚗 車輛靠近停車場入口

  2. 🛑 停車場已滿

  3. ✅ 停車場有空位

  4. 🔍 車牌辨識成功

  5. ❌ 車牌辨識失敗

  6. 🚦 車輛進入停車場

  7. 🕒 車輛進場時間已記錄

  8. ➖ 剩餘車位減一

  9. 🆓 車輛在免費緩衝時間內出場

  10. 💰 車輛需付費

  11. 🧾 停車費用已計算

  12. 💵 繳費完成

  13. 📄 發票已開立

  14. 🚗 車輛離場

  15. ➕ 剩餘車位加一

  16. ⚠️ 系統異常被偵測

  17. 👨‍💻 管理者完成異常處理

命令(Commands)

命令是驅動行為的「指令」。

  1. 查詢停車場剩餘車位

  2. 辨識車牌

  3. 開啟閘門

  4. 記錄車輛進場

  5. 啟動免費緩衝計時

  6. 查詢是否需付費

  7. 計算停車費

  8. 執行付款

  9. 開立發票

  10. 啟動出場有效時間

  11. 記錄車輛出場

  12. 發送出場提醒

  13. 停止入場

  14. 開啟免付費模式

  15. 記錄異常處理結果

實體 / 聚合(Entities / Aggregates)

  1. 車輛

  2. 停場場

  3. 繳費機

策略事件節點(Policies)

進場流程 Policies

  1. 當車輛靠近停車場入口時,顯示剩餘車位數

  2. 當剩餘車位為 0 時,不開啟閘門,顯示停滿

  3. 當剩餘車位大於 0 時,啟動車牌辨識

  4. 當車牌辨識成功時,自動開啟閘門

  5. 當車輛成功進入停車場時,記錄進場時間並扣除一個車位

  6. 當車輛進入時,啟動免費緩衝時間計時

出場與計費流程 Policies

  1. 當車輛準備出場時,檢查是否仍在免費緩衝時間內

  2. 當超過免費緩衝時間時,啟動停車費用計算

  3. 當費用計算完成時,提示駕駛進行付款

  4. 當付款完成時,決定是否開立發票

  5. 當付款完成時,啟動出場有效時間計時

  6. 當駕駛出場時,記錄出場時間並釋放一個車位

異常處理流程 Policies

  1. 當系統偵測異常時,即時通知管理者

  2. 當管理者處理異常時,決定是否暫停入場或開放免付費模式

  3. 當異常狀態中,仍須維持進出記錄正常運作

Event → Policy → Command 樣式

Event Storming 中,我們習慣用這樣的三段式流來呈現:

元素顏色功能說明
Event🟧 橘色發生的事情(「過去式」描述)
Policy🟦 藍色當事件發生後,業務應自動觸發什麼反應
Command🟨 黃色被觸發的具體行動,通常是「做某事」

車輛靠近入口事件範例

[ 車輛靠近入口 ](橘,Event)
          ↓
[ 顯示剩餘車位數 ](藍,Policy)
          ↓
[ 查詢剩餘車位 ](黃,Command

進場流程 Policies 與 Commands

#事件 (Event)Policy (業務策略性述說)Command (操作命令)
1車車靠近入口應即時顯示停車場剩餘容量狀態查詢剩餘車位
2剩餘車位為 0應拒絕進場以避免超負(無 Command, 單純提示)
3有剩餘車位應執行車牌識別以確保進場合法性啟動車牌識別
4車牌識別成功應自動允許車車進場以提升效率開啟閘門
5車牌識別失敗應通知人工介入以維持服務不中斷啟動人工提醒或依託
6車車進場成功應同步更新容量與記錄以便後續計費記錄進場資訊、剩餘車位減一
7車車進場應立即啟動免費停車計時以保障消費者權益啟動免費等待計時
8車車准備出場應檢查是否符合免費出場條件以保障公平查詢停車記錄
9符合免費條件應提示用戶無需付款可直接出場(無 Command, 單純提示)
10超過免費時間應根據規範計算合理停車費產生啟動計算費產生
11費產生完成應提示駕駛人進行付款操作(無 Command, 這是手動啟動)
12駕駛人付款應確認是否需要開立發票以符合規定開立發票
13付款完成應提供合理有效的出場時間限制啟動出場計時
14車車出場成功應即時更新停車容量與離場記錄記錄離場資訊、剩餘車位加一
15系統發現異常應主動通知管理人員以快速回應發送異常通知
16異常處理完成應據規則恢復或變更進出控制策略停止進場 / 啟動免費模式
17異常狀態中進出場即使異常也應持續維持進出場記錄(無 Command)
0
Subscribe to my newsletter

Read articles from 李卡爾 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

李卡爾
李卡爾