Có thể bạn quan tâm: Cách Vẽ Cnc Từ Autodesk Inventor: Hướng Dẫn Chi Tiết Từ A Đến Z
TÓM TẮT
- 1 1. Giới thiệu chung về Composite Structure Diagram
- 2 2. Chuẩn bị môi trường và công cụ
- 3 3. Các bước vẽ Composite Structure Diagram chi tiết
- 3.1 3.1. Bước 1: Xác định phạm vi và mục tiêu diagram
- 3.2 3.2. Bước 2: Tạo lớp (Class/Component) chính
- 3.3 3.3. Bước 3: Thêm các Part (phần tử con)
- 3.4 3.4. Bước 4: Định nghĩa Port (cổng)
- 3.5 3.5. Bước 5: Thêm Interface (giao diện) cho Port
- 3.6 3.6. Bước 6: Kết nối các Part với Port qua Connector
- 3.7 3.7. Bước 7: Thêm các chi tiết bổ sung (Optional)
- 3.8 3.8. Bước 8: Kiểm tra tính hợp lệ và hoàn thiện
- 4 4. Ví dụ thực tế: Vẽ Composite Structure Diagram cho một hệ thống ngân hàng
- 5 5. Các nguyên tắc thiết kế khi vẽ Composite Structure Diagram
- 6 6. Thực hành: Tạo Composite Structure Diagram bằng PlantUML
- 7 7. Lưu ý khi cộng tác và quản lý version của Composite Structure Diagram
- 8 8. Tổng kết
1. Giới thiệu chung về Composite Structure Diagram
Composite Structure Diagram (CSD) – còn được gọi là Diagram cấu trúc hợp thành – là một trong những loại diagram được chuẩn hoá trong UML (Unified Modeling Language). Khác với các diagram như Class Diagram, Sequence Diagram hay Use‑Case Diagram, CSD tập trung mô tả cấu trúc nội tại của một lớp, một component, hoặc một phần mềm ở mức độ chi tiết hơn, bao gồm các phần tử con, các cổng (port), các liên kết (connector) và các phần tử cấu thành (part).
1.1. Vai trò của CSD trong quá trình phát triển phần mềm
| Lợi ích | Mô tả |
|---|---|
| Hiểu rõ kiến trúc nội bộ | CSD cho phép các kiến trúc sư và nhà phát triển nhìn thấy cách một đối tượng (class, component) được cấu thành từ các phần tử con, từ đó nắm bắt được các phụ thuộc và quan hệ nội tại. |
| Tối ưu hoá thiết kế | Bằng cách mô tả chi tiết các port và connector, ta có thể phát hiện các điểm nghẽn, lặp lại hoặc các quan hệ không cần thiết, từ đó cải thiện thiết kế. |
| Hỗ trợ giao tiếp | Khi làm việc trong nhóm đa dạng (developer, tester, analyst), CSD cung cấp một ngôn ngữ trực quan, giúp mọi người cùng hiểu cách các thành phần tương tác. |
| Dễ dàng mở rộng | Thiết kế dựa trên phần tử con và các port giúp mở rộng hệ thống bằng cách thêm hoặc thay thế các phần tử mà không làm ảnh hưởng tới toàn bộ cấu trúc. |
| Kiểm thử và mô phỏng | Các công cụ UML hiện đại cho phép sinh mã hoặc mô phỏng hành vi dựa trên CSD, hỗ trợ kiểm thử tự động và kiểm tra tính đúng đắn. |
1.2. Các thành phần cơ bản của Composite Structure Diagram
| Thành phần | Ký hiệu | Mô tả |
|---|---|---|
| Part (phần tử) | Hình chữ nhật bên trong lớp/component, có tên + tính năng | Đại diện cho một thành phần con (object, class, component) được chứa trong lớp cha. |
| Port (cổng) | Hình tròn hoặc hình vuông gắn vào lớp, thường có tên và kiểu | Xác định điểm giao tiếp giữa lớp và môi trường bên ngoài hoặc giữa các part nội bộ. |
| Connector (kết nối) | Đường thẳng (có thể có mũi tên) | Liên kết các port hoặc part, mô tả luồng thông tin hoặc phụ thuộc. |
| Collaboration | Đánh dấu vùng làm việc (không bắt buộc) | Nhóm các phần tử liên quan tới một mục tiêu cụ thể. |
| Interface | Hình elip hoặc nhãn «interface» | Định nghĩa các hành vi mà port có thể cung cấp hoặc yêu cầu. |
| Binding | Đường nét gắn kết (binding) giữa part và phần tử mô hình bên ngoài | Thể hiện việc phần tử con được ánh xạ tới một thực thể thực tế (instance). |
Hiểu rõ các ký hiệu trên là nền tảng để vẽ CSD một cách chuẩn xác.
Có thể bạn quan tâm: Cách Vẽ Circle Progress Bar Chuẩn Seo: Hướng Dẫn Từ A Đến Z Cho Người Mới Bắt Đầu
2. Chuẩn bị môi trường và công cụ
2.1. Lựa chọn công cụ vẽ UML
| Công cụ | Ưu điểm | Nhược điểm |
|---|---|---|
| Enterprise Architect (Sparx) | Tính năng mạnh, hỗ trợ tạo CSD, sinh code, tích hợp với các công cụ quản lý dự án. | Giá bản quyền cao. |
| Visual Paradigm | Giao diện thân thiện, hỗ trợ đa dạng diagram, có bản community miễn phí. | Một số tính năng nâng cao yêu cầu bản trả phí. |
| StarUML | Đa nền tảng, mở rộng qua plug‑in, giá rẻ. | Không có tính năng sinh code tự động cho CSD. |
| draw.io / diagrams.net | Miễn phí, tích hợp Google Drive, dễ dùng cho diagram nhanh. | Hạn chế trong việc kiểm tra tính hợp lệ của UML. |
| PlantUML (với syntax text) | Tự động hoá, version control dễ dàng, tích hợp CI/CD. | Đòi hỏi người dùng biết cú pháp, không trực quan như drag‑and‑drop. |
Lời khuyên: Nếu bạn mới bắt đầu và muốn có một công cụ mạnh mẽ, Visual Paradigm hoặc Enterprise Architect là lựa chọn tốt. Nếu dự án yêu cầu version control và tự động hoá, PlantUML là giải pháp tối ưu.
2.2. Cài đặt và cấu hình môi trường
- Tải và cài đặt phần mềm đã chọn (theo hướng dẫn trên website chính thức).
- Tạo dự án mới và đặt tên phù hợp (ví dụ:
MySystem_Architecture). - Thêm module UML vào dự án nếu phần mềm không tự động bật.
- Cấu hình palette: Đảm bảo các ký hiệu Part, Port, Connector, Interface được hiển thị.
- Lưu mẫu (template): Tạo một file template CSD chuẩn để tái sử dụng trong các diagram tiếp theo (giúp duy trì đồng nhất).
3. Các bước vẽ Composite Structure Diagram chi tiết
3.1. Bước 1: Xác định phạm vi và mục tiêu diagram
- Xác định đối tượng chính (class, component, subsystem) mà CSD sẽ mô tả.
- Xác định mức chi tiết: Bạn muốn mô tả toàn bộ hệ thống (high‑level) hay chỉ một module con (detail).
- Xác định stakeholder: Kiến trúc sư, developer, tester – mỗi người có nhu cầu thông tin khác nhau.
Ví dụ thực tế: Chúng ta muốn mô tả Component PaymentProcessor trong một hệ thống thương mại điện tử, bao gồm các phần: CardReader, OnlineGateway, TransactionLogger, và các cổng InputPort, OutputPort.
3.2. Bước 2: Tạo lớp (Class/Component) chính

Có thể bạn quan tâm: Cách Vẽ Comment Trong Autocad: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Kéo một biểu tượng Class hoặc Component lên canvas.
- Đặt tên:
PaymentProcessor. - Thêm stereotype (nếu cần) như
<<component>>để phân biệt.
+----------------------+
| <<component>> |
| PaymentProcessor |
+----------------------+
3.3. Bước 3: Thêm các Part (phần tử con)
- Chọn công cụ Part (thường là một hình chữ nhật nhỏ bên trong lớp).
- Kéo vào bên trong
PaymentProcessorvà đặt tên cho từng part:
| Part | Kiểu | Mô tả |
|---|---|---|
cardReader |
Class CardReader |
Đọc thông tin thẻ. |
onlineGateway |
Interface OnlineGateway |
Kết nối tới cổng thanh toán trực tuyến. |
transactionLogger |
Class TransactionLogger |
Ghi lại giao dịch. |
Sau khi thêm, diagram sẽ trông như:
+----------------------+
| <<component>> |
| PaymentProcessor |
| +----------------+ |
| | cardReader : | |
| | CardReader | |
| +----------------+ |
| +----------------+ |
| | onlineGateway :| |
| | OnlineGateway| |
| +----------------+ |
| +----------------+ |
| | transactionLogg| |
| | er : Logger | |
| +----------------+ |
+----------------------+
3.4. Bước 4: Định nghĩa Port (cổng)
- Port Input: Nhận yêu cầu thanh toán.
- Port Output: Trả kết quả (thành công/ thất bại).
Cách thực hiện:
- Chọn công cụ Port (hình tròn hoặc hình vuông).
- Đặt Port ở bên ngoài lớp
PaymentProcessor(đối với giao tiếp với môi trường) và có tên:
+----------------------+
| <<component>> |
| PaymentProcessor |
| ◯ inputPort |
| ◯ outputPort |
+----------------------+
3.5. Bước 5: Thêm Interface (giao diện) cho Port
- Interface
IPaymentRequest(đượcinputPortyêu cầu). - Interface
IPaymentResult(đượcoutputPortcung cấp).
Thực hiện:
- Tạo Interface (elipse) và đặt tên.
- Kết nối Interface tới Port bằng một Realization (đường nét gạch chấm).
IPaymentRequest IPaymentResult ◯ ◯ | | inputPort outputPort
3.6. Bước 6: Kết nối các Part với Port qua Connector
- Connector từ
inputPorttớicardReader(để truyền dữ liệu thẻ). - Connector từ
cardReadertớionlineGateway. - Connector từ
onlineGatewaytớitransactionLogger. - Connector từ
transactionLoggertớioutputPort.
Cách vẽ:
- Chọn công cụ Connector (đường thẳng).
- Kéo từ Port đến Port hoặc Part thích hợp.
- Đánh dấu direction (mũi tên) để chỉ hướng luồng.
Kết quả cuối cùng (đơn giản hoá) sẽ như sau:
inputPort ──► cardReader ──► onlineGateway ──► transactionLogger ──► outputPort
3.7. Bước 7: Thêm các chi tiết bổ sung (Optional)
- Multiplicity: Đánh dấu số lượng phần tử (ví dụ:
onlineGateway0..nếu có nhiều gateway). - Binding: Nếu
cardReaderđược ánh xạ tới một thiết bị phần cứng thực tế, dùng binding để liên kết. - Constraints: Thêm OCL (Object Constraint Language) để mô tả ràng buộc (ví dụ:
self.cardReader.isEnabled = true).
3.8. Bước 8: Kiểm tra tính hợp lệ và hoàn thiện
- Kiểm tra các quy tắc UML: Mỗi Port chỉ được gắn vào một Interface (cung cấp hoặc yêu cầu).
- Đảm bảo không có connector lạc (điểm đầu và cuối đều gắn vào phần tử hợp lệ).
- Thêm chú thích (note) nếu cần giải thích chi tiết.
Sau khi hoàn tất, lưu diagram dưới định dạng .uml, .png, hoặc .svg tùy nhu cầu. Đừng quên đánh version để theo dõi thay đổi.
4. Ví dụ thực tế: Vẽ Composite Structure Diagram cho một hệ thống ngân hàng
4.1. Bối cảnh
Chúng ta sẽ mô tả Component AccountService chịu trách nhiệm quản lý tài khoản, giao dịch, và báo cáo. Component này bao gồm:
AccountRepository(lưu trữ dữ liệu).TransactionProcessor(xử lý giao dịch).ReportGenerator(tạo báo cáo).
Các port:
requestPort(nhận yêu cầu từ UI).responsePort(trả kết quả về UI).
4.2. Các bước vẽ (tóm tắt)
| Bước | Hành động |
|---|---|
| 1 | Tạo component AccountService <<component>>. |
| 2 | Thêm Part: accountRepo : AccountRepository, txnProcessor : TransactionProcessor, reportGen : ReportGenerator. |
| 3 | Thêm Port: requestPort, responsePort. |
| 4 | Định nghĩa Interface: IAccountRequest, IAccountResponse. |
| 5 | Kết nối requestPort → accountRepo → txnProcessor → reportGen → responsePort. |
| 6 | Thêm multiplicity: txnProcessor1.. nếu hỗ trợ đa luồng. |
| 7 | Kiểm tra quy tắc và lưu diagram. |
4.3. Diagram cuối cùng (được mô tả bằng ký hiệu)

Có thể bạn quan tâm: Cách Vẽ Comic Speed Line: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
+---------------------------------------------------+
| <<component>> AccountService |
| ◯ requestPort ◯ responsePort |
| | | |
| | IAccountRequest | IAccountResponse |
| +--------------------+------------------------+ |
| | accountRepo : AccountRepository | |
| | txnProcessor : TransactionProcessor1.. | |
| | reportGen : ReportGenerator | |
+---------------------------------------------------+ Connector:
requestPort ─► accountRepo ─► txnProcessor ─► reportGen ─► responsePort
5. Các nguyên tắc thiết kế khi vẽ Composite Structure Diagram
- Tách biệt trách nhiệm (Single Responsibility Principle)
-
Mỗi part nên có một nhiệm vụ duy nhất. Tránh gộp quá nhiều chức năng vào một phần tử.
-
Sử dụng Port để ẩn chi tiết nội bộ
-
Port giúp đóng gói (encapsulation). Các thành phần bên ngoài chỉ biết đến các port, không biết cách phần tử nội bộ được cài đặt.
-
Kết nối qua Interface, không trực tiếp
-
Khi một part cần giao tiếp với part khác, sử dụng Interface để giảm phụ thuộc chặt chẽ.
-
Giữ diagram sạch sẽ, không quá tải
-
Nếu một component quá phức tạp, cân nhắc chia thành multiple CSDs (mỗi diagram mô tả một khía cạnh).
-
Ánh xạ thực tế (Binding) khi cần
-
Đối với phần cứng hoặc service bên ngoài, sử dụng binding để chỉ ra mối quan hệ thực tế, giúp các developer hiểu rõ môi trường chạy.
-
Đánh dấu Multiplicity và Constraints
- Đưa ra các ràng buộc số lượng hoặc trạng thái để tránh hiểu lầm trong giai đoạn triển khai.
6. Thực hành: Tạo Composite Structure Diagram bằng PlantUML
PlantUML cho phép mô tả CSD bằng văn bản, rất tiện cho version control. Dưới đây là ví dụ cho PaymentProcessor:
@startuml
skinparam componentStyle rectangle ' Định nghĩa component
component "PaymentProcessor <<component>>" as PP { ' Các part cardReader as CR onlineGateway as OG transactionLogger as TL
} ' Port và Interface
interface IPaymentRequest
interface IPaymentResult PP :: inputPort --> IPaymentRequest
PP :: outputPort --> IPaymentResult ' Kết nối các part
IPaymentRequest --> CR
CR --> OG
OG --> TL
TL --> IPaymentResult ' Đánh dấu multiplicity (nếu cần)
OG -hidden-> OG : 0.. @enduml
Khi chạy PlantUML, bạn sẽ nhận được một hình ảnh CSD chuẩn, có thể đưa vào tài liệu hoặc đồng bộ với Git.
7. Lưu ý khi cộng tác và quản lý version của Composite Structure Diagram
| Vấn đề | Giải pháp |
|---|---|
| Xung đột khi nhiều người chỉnh sửa | Sử dụng công cụ hỗ trợ model repository (ex: Enterprise Architect Server) hoặc định dạng text (PlantUML) để merge dễ dàng. |
| Theo dõi thay đổi | Đánh version mỗi lần sửa đổi (v1.0, v1.1, …) và ghi chú (changelog) trong file README. |
| Kiểm tra tính hợp lệ tự động | Tích hợp UML validation plugin trong CI pipeline (ví dụ: uml-validator cho PlantUML). |
| Đồng nhất ký hiệu | Định nghĩa style guide (màu sắc, kích thước, cách đặt port) và lưu dưới dạng template. |
| Tài liệu hóa | Kèm mỗi diagram một document mô tả mục đích, các giả định và các ràng buộc quan trọng. |
8. Tổng kết
Việc vẽ Composite Structure Diagram không chỉ là một hoạt động kỹ thuật mà còn là một quá trình suy nghĩ về kiến trúc, về cách các phần tử tương tác và cách chúng được đóng gói. Bằng cách tuân thủ các bước:
- Xác định phạm vi và đối tượng chính.
- Tạo component/lớp và thêm các part.
- Định nghĩa port, interface và connector.
- Kiểm tra tính hợp lệ, thêm multiplicity, constraints và binding khi cần.
Bạn sẽ có một CSD rõ ràng, chuẩn xác và dễ bảo trì. Khi kết hợp với các công cụ hiện đại như Enterprise Architect, Visual Paradigm, hoặc PlantUML, quá trình này trở nên nhanh chóng và có thể tích hợp vào quy trình DevOps.
Hy vọng bài viết này cung cấp cho bạn một hướng dẫn chi tiết từ A‑Z để tạo ra những Composite Structure Diagram chất lượng, hỗ trợ tối đa cho việc thiết kế, phát triển và bảo trì phần mềm của bạn. Chúc bạn thành công!
