引言
在數位時代,線上酒店預訂系統已成為旅遊業的支柱。像 Booking.com、Expedia、Airbnb 以及酒店連鎖集團的官方網站等平台,都依賴於順暢、可靠且可擴展的預訂流程,以提供無縫的客人體驗。
本文介紹一個全面的案例研究關於一個線上酒店預訂系統,使用UML 序列圖。我們將逐步說明客人搜尋並預訂酒店房間的完整生命周期——從最初的搜尋到最終確認——包括房間可用性檢查, 付款處理, 確認通知,以及錯誤處理.
為了讓這項內容更具實用性且可立即使用,我們提供一個完全驗證過、可直接投入生產環境的 PlantUML 程式碼片段,可生成清晰且符合標準的圖示。您可在任何相容工具中立即渲染,無需任何設計技能。
情境概覽
一位客人造訪酒店預訂網站或行動應用程式,並執行以下動作:
-
輸入入住/退房日期, 目的地(城市/地點), 人數,以及 房型 (例如:標準房、豪華房)。
-
系統使用
可用性服務. -
傳回一組 可預訂房間,包含 照片、價格、設施,以及 取消政策.
-
客人選擇房間並輸入 旅客資訊 (姓名、電子郵件、聯絡方式)。
-
可選擇套用 促銷代碼.
-
系統處理 透過付款網關進行付款.
-
成功時:
-
在資料庫中預訂房間。
-
傳送 確認電子郵件/簡訊透過
通知服務. -
顯示 預訂成功在使用者介面上。
-
-
如果沒有房間可預訂或付款失敗:
-
顯示替代建議或錯誤訊息.
-
允許重新嘗試或搜尋優化。
-
這反映了現實世界中的行為:動態可用性, 非同步付款,以及容錯能力.
應用的關鍵 UML 概念
| 概念 | 在此圖表中的角色 |
|---|---|
| 生命線 | 每個參與者(例如)的垂直虛線客人, 預訂服務) |
同步訊息(->) |
直接呼叫(例如BS -> AS:查詢房間) |
非同步訊息 (-->) |
非阻塞或回覆 (例如:PG --> BS:成功) |
| 啟用欄 | 顯示正在處理的細長矩形 (啟用 / 停用) |
| 替代片段 | 條件:替代房間可用對比否則無房間可用 |
| 選擇性片段 | 選擇性流程:選擇性 套用促銷代碼 |
| 迴圈片段 | 此處未使用,但可加入(例如:重新搜尋) |
參與者 (房客) |
啟動動作的外部使用者 |
外部服務 (<<外部>>) |
支付網關, 通知服務 |
| 回傳訊息 | 傳遞結果(例如,:List<Room> 可用房間) |
| 時間推進 | 由上至下 — 時間的邏輯流程 |
參與者(生命線)
| 參與者 | 角色 |
|---|---|
客人 |
啟動預訂的參與者 |
Web應用程式 |
前端使用者介面(網頁/行動應用程式),負責輸入與顯示 |
預訂服務 |
核心控制器,管理預訂生命週期 |
可用性服務 |
檢查各飯店房間庫存的服務 |
支付網關 |
外部支付處理器(<<外部>>) |
通知服務 |
發送確認郵件/簡訊(<<外部>>) |
資料庫 |
儲存房間可用性、預訂資訊與客人資料(隱含) |
✅ PlantUML 程式碼:完全驗證的序列圖
🔧 將此程式碼複製貼上至 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 → 點擊 “產生” → 即時查看完整的流程呈現。
如何使用此圖表
🛠 步驟 1:呈現圖表
-
貼上程式碼 → 點擊 “產生”
-
✅ 即時呈現帶有生命線、訊息與激活條的視覺化序列圖
💡 小技巧:加入
skinparam backgroundColor #F8F8F8以獲得乾淨的白色背景。
🖥️ 步驟 2:與 Visual Paradigm 整合
-
建立新的 序列圖
-
使用 工具 > 匯入 > PlantUML → 粘貼程式碼
-
自動產生具備正確結構、生命線與激活條的圖形
🧠 步驟 3:使用 AI 進行優化(進階)
-
使用 chat.visual-paradigm.com 來提問:
「將此飯店預訂序列重構為分層架構:分離 UI(WebApp)、Controller(BookingController)、Services(AvailabilityService、PaymentService、NotificationService)、Repository(RoomRepository)。加入輸入驗證、錯誤處理與記錄功能。」
-
VP AI 將會:
-
拆分
BookingService為BookingController,ReservationService,PaymentService -
加入
validateGuestInput(),計算稅款(),記錄預訂() -
新增
<<服務>>,<<外部>>,<<倉儲>>型態 -
增強
替代/選擇並包含詳細的錯誤案例
-
📄 步驟 4:在 OpenDocs 中記錄(協作)
-
開啟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 支援
- 軟體設計中序列圖的完整指南:此詳細手冊章節說明了使用序列圖來模擬系統動態行為的目的、結構與最佳實務。
- 什麼是序列圖?——一份 UML 指南:一份針對初學者的入門指南,說明序列圖在時序上呈現物件互動的角色。
- 在 Visual Paradigm 中動畫化序列圖——教學:本教學提供如何建立動態、動畫化的序列圖,以更有效地視覺化軟體工作流程與系統互動。
- Visual Paradigm – 搭載 AI 的 UML 序列圖:本文示範平台的 AI 引擎如何讓使用者在建模套件內立即生成專業的 UML 序列圖。
- Visual Paradigm 中的 AI 驅動序列圖優化:此資源探討如何利用 AI 工具將用例描述轉化為精確的序列圖,且僅需最少的手動操作。
- 精通 Visual Paradigm 中的序列圖:AI 聊天機器人教學:一份對初學者友善的教學,透過真實的電商聊天機器人情境,教授對話式圖形繪製。
- 完整教學:使用 AI 序列圖優化工具:逐步指南,說明如何運用專用的 AI 功能,以提升序列模型的準確性、清晰度與一致性。
- 如何使用UML序列圖建模MVC: 本指南教導使用者如何視覺化模型、檢視和控制器組件之間的互動,以提升系統架構的清晰度。
- Visual Paradigm:主流程與異常流程的獨立序列圖: 本文技術文章說明如何使用獨立圖示來建模主流程與替代/異常流程,以維持模型的可讀性。
- PlantUML序列圖生成器|視覺化建構工具: 介紹一種視覺化生成工具,使用者可透過逐步向導來定義參與者與訊息,以建立基於PlantUML的序列圖。











