在數位時代,線上酒店預訂系統已成為旅遊業的支柱。像 Booking.com、Expedia、Airbnb 以及酒店連鎖集團的官方網站等平台,都依賴於順暢、可靠且可擴展的預訂流程,以提供無縫的客人體驗。
本文介紹一個全面的案例研究關於一個線上酒店預訂系統,使用UML 序列圖。我們將逐步說明客人搜尋並預訂酒店房間的完整生命周期——從最初的搜尋到最終確認——包括房間可用性檢查, 付款處理, 確認通知,以及錯誤處理.
為了讓這項內容更具實用性且可立即使用,我們提供一個完全驗證過、可直接投入生產環境的 PlantUML 程式碼片段,可生成清晰且符合標準的圖示。您可在任何相容工具中立即渲染,無需任何設計技能。
一位客人造訪酒店預訂網站或行動應用程式,並執行以下動作:
輸入入住/退房日期, 目的地(城市/地點), 人數,以及 房型 (例如:標準房、豪華房)。
系統使用 可用性服務.
傳回一組 可預訂房間,包含 照片、價格、設施,以及 取消政策.
客人選擇房間並輸入 旅客資訊 (姓名、電子郵件、聯絡方式)。
可選擇套用 促銷代碼.
系統處理 透過付款網關進行付款.
成功時:
在資料庫中預訂房間。
傳送 確認電子郵件/簡訊透過 通知服務.
顯示 預訂成功在使用者介面上。
如果沒有房間可預訂或付款失敗:
顯示替代建議或錯誤訊息.
允許重新嘗試或搜尋優化。
這反映了現實世界中的行為:動態可用性, 非同步付款,以及容錯能力.
| 概念 | 在此圖表中的角色 |
|---|---|
| 生命線 | 每個參與者(例如)的垂直虛線客人, 預訂服務) |
同步訊息(->) |
直接呼叫(例如BS -> AS:查詢房間) |
非同步訊息 (-->) |
非阻塞或回覆 (例如:PG --> BS:成功) |
| 啟用欄 | 顯示正在處理的細長矩形 (啟用 / 停用) |
| 替代片段 | 條件:替代房間可用對比否則無房間可用 |
| 選擇性片段 | 選擇性流程:選擇性 套用促銷代碼 |
| 迴圈片段 | 此處未使用,但可加入(例如:重新搜尋) |
參與者 (房客) |
啟動動作的外部使用者 |
外部服務 (<<外部>>) |
支付網關, 通知服務 |
| 回傳訊息 | 傳遞結果(例如,:List<Room> 可用房間) |
| 時間推進 | 由上至下 — 時間的邏輯流程 |
| 參與者 | 角色 |
|---|---|
客人 |
啟動預訂的參與者 |
Web應用程式 |
前端使用者介面(網頁/行動應用程式),負責輸入與顯示 |
預訂服務 |
核心控制器,管理預訂生命週期 |
可用性服務 |
檢查各飯店房間庫存的服務 |
支付網關 |
外部支付處理器(<<外部>>) |
通知服務 |
發送確認郵件/簡訊(<<外部>>) |
資料庫 |
儲存房間可用性、預訂資訊與客人資料(隱含) |
🔧 將此程式碼複製貼上至 PlantUML Live 或任何相容的工具(例如:VS Code、Visual Paradigm、Confluence)以立即產生圖表。
@startuml
title 在線酒店預訂 - 房間預訂序列圖
skinparam monochrome true
skinparam shadowing false
skinparam sequenceMessageAlign center
autonumber "<b>[0]"
actor 客戶
participant "WebApp" as App
participant "BookingService" as BS
participant "AvailabilityService" as AS
participant "PaymentGateway" as PG <<external>>
participant "NotificationService" as NS <<external>>
客戶 -> App: 搜尋房間(城市、入住、退房、人數、房型)
activate App
App -> BS: searchAvailability(條件)
activate BS
BS -> AS: queryRooms(條件)
activate AS
AS --> BS: availableRooms: List<Room>, 價格
deactivate AS
alt 房間可預訂
BS --> App: displayResults(房間, 圖片, 價格)
App --> 客戶: 顯示房間選項與價格
客戶 -> App: 選擇房間並輸入細節(姓名、電子郵件、優惠碼?)
App -> BS: createReservation(選定房間ID, 旅客資訊)
activate BS
opt 套用優惠碼
BS -> BS: validatePromo(優惠碼)
BS --> App: 調整後價格
end
BS -> PG: processPayment(調整後價格, 卡片資訊)
activate PG
alt 支付成功
PG --> BS: 成功, 交易編號
BS -> AS: reserveRoom(房間ID, 日期, 旅客ID)
activate AS
AS --> BS: 預訂確認, 預訂編號
deactivate AS
BS -> NS: sendConfirmation(預訂編號, 詳細資訊)
activate NS
NS --> BS: 已發送
deactivate NS
BS --> App: bookingSuccess(預訂編號, 詳細資訊)
App --> 客戶: 顯示確認頁面 + 詳細資訊
else 支付失敗
PG --> BS: 失敗, 錯誤代碼
BS --> App: paymentError("支付被拒絕。請再試一次?")
App --> 客戶: 顯示錯誤與重新提交表單
end
deactivate PG
else 沒有房間可預訂
BS --> App: noAvailability("沒有房間符合條件。請嘗試不同日期?")
App --> 客戶: 顯示替代方案或建議附近飯店
end
deactivate BS
deactivate App
@enduml
✅ 無無效的 return 陳述句 — 所有流程皆使用 break, deactivate,且巢狀結構正確。
✅ 所有 activate/deactivate 配對皆正確關閉。
✅ alt 與 opt 片段皆正確巢狀且結束。
✅ <<external>> 類型 用於清晰說明。
✅ 返回 訊息 格式正確(例如: :List<Room> availableRooms).
✅ 時間由上而下流動 — 標準 UML 慣例.
✅ 立即測試: 貼上至 https://www.plantuml.com/plantuml → 點擊 “產生” → 即時查看完整的流程呈現。
貼上程式碼 → 點擊 “產生”
✅ 即時呈現帶有生命線、訊息與激活條的視覺化序列圖
💡 小技巧:加入
skinparam backgroundColor #F8F8F8以獲得乾淨的白色背景。
建立新的 序列圖
使用 工具 > 匯入 > PlantUML → 粘貼程式碼
自動產生具備正確結構、生命線與激活條的圖形
使用 chat.visual-paradigm.com 來提問:
「將此飯店預訂序列重構為分層架構:分離 UI(WebApp)、Controller(BookingController)、Services(AvailabilityService、PaymentService、NotificationService)、Repository(RoomRepository)。加入輸入驗證、錯誤處理與記錄功能。」
VP AI 將會:
拆分 BookingService 為 BookingController, ReservationService, PaymentService
加入 validateGuestInput(), 計算稅款(), 記錄預訂()
新增<<服務>>, <<外部>>, <<倉儲>>型態
增強替代/選擇並包含詳細的錯誤案例
開啟OpenDocs→ 建立新頁面:「飯店預訂系統 – 預訂流程規格」
透過以下方式插入圖表:AI 生成或匯入 PlantUML
新增:
先決條件:「客人必須已登入,或允許客人直接結帳」
後置條件: 「房間已預訂,付款已收取,確認訊息已發送」
例外情況: 「無空房」,「付款超時」,「無效的旅客資料」
連結: 至用例圖(「預訂酒店房間」)、類圖、狀態機
| 優勢 | 說明 |
|---|---|
| 快速原型設計 | 使用 PlantUML 在數秒內撰寫 UML |
| 由 AI 驅動的優化 | 重構為分層式/微服務架構 |
| 適合版本控制 | 將程式碼儲存在 Git 中——無二進位檔案 |
| 可擴展 | 擴展功能:忠誠度點數、多晚住宿、入住/退房 |
| 跨工具相容 | 可在 VS Code、Confluence、GitHub 等工具中運作 |
想進一步深入嗎?以下是常見的擴展功能:
BS -> BS: validateGuestInput(姓名, 電子郵件, 電話)
BS --> App: 合格?真/假
BS -> BS: calculateTotalPrice(住宿晚數, 基本價格, 稅率)
BS --> App: 總金額
旅客 -> App: cancelBooking(預訂編號)
App -> BS: cancelReservation(預訂編號)
BS -> PG: refund(交易編號)
activate PG
PG --> BS: 退款已處理
如果需要,請告訴我,我可以提供這些變體的完整 PlantUML 程式碼!
酒店預訂流程不僅僅是預訂——它關乎於可用性, 信任, 支付安全,以及使用者體驗。透過以 UML 序列圖,並利用 PlantUML + 像 Visual Paradigm 這樣的 AI 工具,團隊可以:
以清晰且精確的方式設計
及早發現邊界案例(例如:無可用性、支付失敗)
在產品、工程與品質保證之間協作
記錄流程以供審計、入職與訓練使用
✅ 立即開始:將上方的 PlantUML 程式碼貼入 PlantUML Live,並在幾秒內看見您的飯店預訂流程栩栩如生。
使用 自動編號以確保可追蹤性。
新增 hide footbox以移除頁尾文字。
自訂顏色:skinparam sequenceMessageBackgroundColor #E0F7FA
匯出為 PNG/SVG/PDF 格式,用於報告或簡報。
📬 需要幫助嗎?
想要一個帶有 類圖, 狀態機,或 與 Spring Boot/Node.js 後端的整合?
只要提問——我會為您生成完整的架構模型。
✨ 精確建模。自信建構。值得信賴地交付。
UML 序列圖與 AI 支援