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

領域專家口述業務流程
停車場入口會顯示目前停車場剩餘車位,當車輛駛入停車場入口,會先判斷是否有停車位,若是有停車位,車號辨視系統成功取得車號將會放入車輛進入,當感應車輛真的進入後,記錄車輛的車牌與其進入的時間,會將剩餘車位減一。
車輛進入之後,會給於一段緩衝時間,若是車輛在緩衝時間內出場,系統判斷可以正常出場不必繳納停車費用,若超過緩衝時間,即必須這行繳費程序之後再放行。
繳費流程要求在出場之前完成,不會與出場流程一起,繳費時會判斷是否在緩衝時間內,若是,將不必繳費請駕駛人儘快離場,並提醒剩於緩衝時間,緩衝時不會因此展延,如果緩衝時間是 15 分鐘,在第 14 分鐘進行繳費,雖然不必繳費,但會告知駕駛人剩餘不到一分鐘,以此類推。
繳費時計算費用,系統判斷規格,會有半小時或一小時計費制,並且有每天上限或無上限制,比如每半小時 20 元,每天最高上限 160 元,當計算費用完成,請駕駛者繳費,繳費提供多種付款方式,以需求進行擴充,比如現金、apple pay、 line pay 等多元付款方式,當付款完成後依場地規劃須開立發票或不須開立,若開立發票,支援電子式,或是電子發票,電子發票可支援載具、愛心碼相關規則。
付款後有緩衝時間,駕駛者必須在緩衝時間內離場,若超過,將重新計費並進行繳費,車輛正式出場後記錄離開時間,並將剩餘車位加一。
若是停車場發生異常需要通知管理者線上處理,系統可以通知管理者,管理者可以遠端處理車停進出管理,比如收費系統異常,管理者可以設定車輛暫時停止進入或開放免付費進出,若進出場記錄仍然可以正常運作,仍然必須記錄。
精煉版業務流程摘要(供Event Storming)
進場流程:顯示剩餘車位 → 車輛靠近 → 辨識車號 → 判斷是否可入場 → 放行 → 感應進入 → 減一車位 → 記錄車牌、進場時間。
免費緩衝:進場後啟動免費緩衝 → 緩衝內出場 → 不須付費 → 記錄出場。
繳費流程:超過緩衝 → 繳費 → 支付多元 → 發票/不發票 → 通知剩餘時間。
出場流程:付款後啟動有效出場時間 → 感應離場 → 加一車位 → 記錄。
異常處理:設備異常 → 通知管理者 → 遠端控制 → 記錄行為與結果。
Domain Events
這些是「發生過的、不可改變的事實」。
🚗 車輛靠近停車場入口
🛑 停車場已滿
✅ 停車場有空位
🔍 車牌辨識成功
❌ 車牌辨識失敗
🚦 車輛進入停車場
🕒 車輛進場時間已記錄
➖ 剩餘車位減一
🆓 車輛在免費緩衝時間內出場
💰 車輛需付費
🧾 停車費用已計算
💵 繳費完成
📄 發票已開立
🚗 車輛離場
➕ 剩餘車位加一
⚠️ 系統異常被偵測
👨💻 管理者完成異常處理
命令(Commands)
命令是驅動行為的「指令」。
查詢停車場剩餘車位
辨識車牌
開啟閘門
記錄車輛進場
啟動免費緩衝計時
查詢是否需付費
計算停車費
執行付款
開立發票
啟動出場有效時間
記錄車輛出場
發送出場提醒
停止入場
開啟免付費模式
記錄異常處理結果
實體 / 聚合(Entities / Aggregates)
車輛
停場場
繳費機
策略事件節點(Policies)
進場流程 Policies
當車輛靠近停車場入口時,顯示剩餘車位數
當剩餘車位為 0 時,不開啟閘門,顯示停滿
當剩餘車位大於 0 時,啟動車牌辨識
當車牌辨識成功時,自動開啟閘門
當車輛成功進入停車場時,記錄進場時間並扣除一個車位
當車輛進入時,啟動免費緩衝時間計時
出場與計費流程 Policies
當車輛準備出場時,檢查是否仍在免費緩衝時間內
當超過免費緩衝時間時,啟動停車費用計算
當費用計算完成時,提示駕駛進行付款
當付款完成時,決定是否開立發票
當付款完成時,啟動出場有效時間計時
當駕駛出場時,記錄出場時間並釋放一個車位
異常處理流程 Policies
當系統偵測異常時,即時通知管理者
當管理者處理異常時,決定是否暫停入場或開放免付費模式
當異常狀態中,仍須維持進出記錄正常運作
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) |
Subscribe to my newsletter
Read articles from 李卡爾 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
