組件圖用於表示系統的實體或邏輯組件。它提供了軟體組件之間互動的高階視圖。本指南詳細說明了建立清晰、有效圖表所需的符號、規則與實用技巧。

組件建模入門 🏗️
組件圖專注於系統結構,其層級高於類圖。它顯示不同模組或子系統的組織方式。這種視圖有助於開發人員理解軟體架構的實體部署與邏輯依賴關係。
主要優勢包括:
- 可視化系統組織
- 定義介面合約
- 追蹤模組之間的依賴關係
- 支援高階設計文件
在建立這些圖表時,目標是清晰明確。避免顯示每一個類別,應專注於構成應用程式的關鍵組成元件。
核心符號與標記 🔣
理解標準符號是第一步。這些元素定義了圖表的視覺語言。
1. 組件圖示
主要符號是一個左側有兩個凸起的矩形。此形狀代表系統中的模組化部分。在矩形內部,放置組件的名稱。
- 形狀:左側有兩個凸起的矩形。
- 標籤:粗體的組件名稱。
- 範疇: 您可以添加類似 <
> 的標籤於名稱上方。
2. 介面
介面定義組件所提供的行為或所需的功能。它們對於將實作與使用分離至關重要。
- 提供的介面: 一個附著於組件上的「棒棒糖」形狀。它表示組件所提供的功能。
- 所需的介面: 一個附著於組件上的「插座」形狀。它表示組件需要來自其他組件的功能。
3. 埠
埠是組件之間互動的點。當組件與多個不同系統有連接時,通常會使用埠。
- 符號: 位於組件邊界上的小矩形。
- 用法: 表示外部連接進入或離開的位置。
4. 節點
雖然組件圖著重於軟體,但它們通常與部署相關。節點代表實體硬體或執行環境。
- 符號: 3D立方體形狀。
- 標籤: 伺服器、裝置或環境的名稱。
| 符號 | 名稱 | 含義 |
|---|---|---|
| 帶有卡扣的矩形 | 組件 | 系統的模組化部分 |
| 棒棒糖 | 提供的介面 | 組件所提供的功能 |
| 插座 | 所需的介面 | 組件所需的機能 |
| 3D立方體 | 節點 | 實體硬體或環境 |
| 開放矩形 | 套件 | 元素的群組 |
介面與埠概念 🔌
介面是組件之間的橋樑。它們確保組件之間能夠通訊,而無需了解彼此的內部細節。
提供的介面
當組件實作特定功能時,它就會提供介面。其他組件可以使用此介面與系統互動。
- 使用圓形(棒棒糖)來表示介面。
- 將介面連接到組件線。
- 以可用的特定操作來標示介面。
所需的介面
當組件依賴外部功能時,它就需要介面。這會產生依賴關係。
- 使用半圓形(插座)來表示介面。
- 將插座連接到組件線。
- 以所需的作業來標示介面。
使用埠
埠細化了介面的概念。它們允許您將多個介面歸類於單一存取點之下。
- 將埠放置在組件的邊緣。
- 將線連接到埠,而非組件本體。
- 當存在許多連接時,這能讓圖表更為整潔。
關係與依賴關係 🔄
正確連接組件對於理解系統流程至關重要。不同的線條代表不同類型的互動。
依賴關係
依賴關係表示一個組件依賴於另一個組件。如果供應者變更,客戶端可能會失效。
- 樣式:虛線搭配開口箭頭。
- 方向:從客戶端指向供應者。
- 用途:用於介面使用或簡單的參考。
關聯
關聯代表一種結構關係。它暗示兩個組件之間存在直接連接。
- 樣式:實線。
- 用途: 當組件是更大整體的一部分或直接共享資料時使用。
實現
當組件實現介面或規格時,就會發生實現。
- 樣式: 虛線,搭配實心箭頭。
- 方向: 從實作者指向介面。
一般化
一般化代表繼承。一個組件是另一個組件的特殊版本。
- 樣式: 實線,搭配空心三角箭頭。
- 方向: 從子類別指向超類別。
| 關係 | 線條樣式 | 箭頭類型 | 目的 |
|---|---|---|---|
| 依賴 | 虛線 | 開放箭頭 | 使用或依賴 |
| 關聯 | 實線 | 無 | 直接連接 |
| 實現 | 虛線 | 實心三角形 | 實現 |
| 泛化 | 實心 | 空心三角形 | 繼承 |
結構規則與慣例 📏
一致性使圖表更易讀。遵循這些慣例以維持品質。
命名慣例
- 為組件名稱使用 PascalCase(例如,PaymentService).
- 為介面名稱使用 camelCase(例如,paymentInterface).
- 保持名稱具有描述性。除非是業界標準,否則避免使用縮寫。
分組與套件
- 使用套件來分組相關組件。
- 清楚標示套件(例如,Core, UI, Data).
- 透過將組件嵌套到套件中,避免圖表過於擁擠。
分層
依層次邏輯組織組件。這有助於理解資料流。
- 將表示層組件置於頂部。
- 將商業邏輯置於中間。
- 將資料存取層置於底部。
應避免的常見錯誤 ⚠️
即使是經驗豐富的建築師也會犯錯。請留意這些常見的陷阱。
- 過度複雜: 不要畫出每一個類別。元件圖是高階的。如果你看到類別,很可能你正在使用類別圖。
- 遺漏介面: 不要沒有介面就直接連接元件。這會導致它們過於緊密地耦合。
- 命名不一致: 確保所有名稱與程式碼庫或文件一致。名稱不符會造成混淆。
- 循環依賴: 避免出現元件A依賴B,而B又依賴A的循環。這表示設計上有缺陷。
- 忽略埠: 如果一個元件連接到許多事物,請使用埠來保持佈局整潔。
文件與維護 📝
圖表只有在保持更新時才有用。應將其視為動態文件。
版本控制
- 將圖表檔案儲存在您的版本控制系統中。
- 當架構變更時,更新圖表。
- 在提交訊息中記錄變更。
交叉參考
- 將元件圖連結至類別圖,以取得詳細視圖。
- 連結至部署圖以取得實際環境背景。
- 確保所有圖表中的元件名稱完全一致。
審查流程
- 請同儕審查圖表以確保清晰度。
- 檢查介面是否符合實際的API合約。
- 確保依賴關係反映實際的建構順序。
進階考量 🧠
對於複雜系統,標準符號可能需要調整。
複合元件
有時一個元件包含其他元件。這稱為複合結構。
- 畫一個較大的元件框。
- 將較小的組件放置在其中。
- 標示內部連接,但不與外部連接。
套件中的介面
您可以將介面分組到套件中,以組織大型系統。
- 為所有服務介面建立一個套件。
- 為所有資料介面建立一個套件。
- 在您的組件圖中參考這些套件。
文件編寫的最佳實務 📋
遵循這些提示可確保您的圖表有效達成其目的。
- 從整體圖像開始: 首先定義主要組件。稍後再添加細節。
- 善用空白空間: 不要讓元素過於擁擠。使用間距來分組相關項目。
- 限制連接: 如果組件的連線過多,請考慮將其拆分為子組件。
- 保持一致的方向: 將組件排列成行或列,以引導視線。
- 圖例: 如果您使用非標準符號,請包含圖例。
重點摘要 🎯
- 為組件、介面和埠使用標準符號。
- 定義明確的介面以降低耦合度。
- 使用虛線表示依賴關係,實線表示關聯關係。
- 保持圖表的高階層次;避免顯示單獨的類別。
- 保持命名和結構的一致性。
- 定期更新圖表以符合程式碼庫。
遵循這些指南,您將建立能清楚傳達架構的圖表。這有助於提升協作品質,並減少開發過程中的錯誤。












