Mô hình hóa các yêu cầu thực tế bằng UML – Hướng dẫn thực tiễn
1. Giới thiệu
Trong phát triển phần mềm hiện đại, biểu đồ use caselà công cụ nền tảng để nắm bắt các yêu cầu chức năng từ góc độ người dùng. Nghiên cứu điển hình này trình bày phân tích chi tiết về một biểu đồ use case thực tếcho một Giao đồ ăn, sử dụng cú pháp PlantUMLlàm ngôn ngữ mô hình hóa. Mục tiêu là không chỉ chứng minh cái gìcác phần tử nào được sử dụng trong biểu đồ, mà còn tại saochúng được lựa chọn — làm nổi bật các quyết định mô hình hóa thực tiễn, các quy ước, và những sai lầm phổ biến.
Nghiên cứu điển hình này phục vụ cả người mới bắt đầu học UMLvà các chuyên gia đang tinh chỉnh thực hành mô hình hóa của họ. Nó phân tích từng phần tử của biểu đồ, giải thích mục đích của nó và thảo luận về các hệ quả thực tế.
2. Tổng quan hệ thống
Nền tảng Giao đồ ăn là một thị trường kỹ thuật số kết nối:
- Khách hàng(các cá nhân đặt đồ ăn),
- Nhà hàng(các đơn vị cung cấp bữa ăn),
- Tài xế(nhân viên giao hàng),
- Cổng thanh toán bên ngoài(các hệ thống bên thứ ba xử lý giao dịch).
Nền tảng cho phép người dùng duyệt qua các nhà hàng, đặt hàng, theo dõi giao hàng, quản lý thanh toán và áp dụng các chương trình khuyến mãi. Hệ thống tích hợp với các dịch vụ bên ngoài như bộ xử lý thanh toán và không xử lý logic thanh toán nội bộ.
Mã PlantUML:
@startuml
skinparam monochrome true
skinparam shadowing false
left to right direction
' Tất cả các vai trò đều được định nghĩa bên ngoài hình chữ nhật
actor Customer
actor "Khách hàng đã đăng ký" as RegCustomer
actor "Nhân viên nhà hàng" as Restaurant
actor Driver
actor "Bộ xử lý thanh toán" as PaymentGW
rectangle "Nền tảng giao đồ ăn" {
(Duyệt qua nhà hàng)
(Đặt hàng)
(Theo dõi đơn hàng)
(Quản lý thực đơn)
(Chấp nhận / Chuẩn bị đơn hàng)
(Giao hàng)
(Xử lý thanh toán)
(Phát hành hoàn tiền)
(Áp dụng mã khuyến mãi)
(Sử dụng ví)
(Thanh toán bằng thẻ)
(Thanh toán bằng ví điện tử)
' Mối quan hệ – mũi tên vượt qua ranh giới
Customer --> (Duyệt qua nhà hàng)
RegCustomer --> (Đặt hàng)
RegCustomer --> (Theo dõi đơn hàng)
Restaurant --> (Quản lý thực đơn)
Restaurant --> (Chấp nhận / Chuẩn bị đơn hàng)
Driver --> (Giao hàng)
PaymentGW --> (Xử lý thanh toán)
PaymentGW --> (Phát hành hoàn tiền)
' include
(Đặt hàng) ..> (Xử lý thanh toán) : <<include>>
' extend
(Đặt hàng) <.. (Áp dụng mã khuyến mãi) : <<extend>>
(Xử lý thanh toán) <.. (Sử dụng ví) : <<extend>>
' General hóa
(Xử lý thanh toán) <|-- (Thanh toán bằng thẻ)
(Xử lý thanh toán) <|-- (Thanh toán bằng ví điện tử)
}
' General hóa vai trò (cũng ở bên ngoài)
Customer <|-- RegCustomer
note right of PaymentGW
Cổng thanh toán bên ngoài
(Stripe, PayPal, Adyen, ...)
end note
note bottom of (Áp dụng mã khuyến mãi)
Tùy chọn – chỉ khi nhập mã hợp lệ
end note
@enduml ✅ Điểm nhấn chính: Sơ đồ tập trung vào các tương tác bên ngoài — nó cho thấy hệ thống làmcho người dùng và các hệ thống của nó, chứ không phải cách nó được triển khai.
3. Các thành phần sơ đồ: Đi sâu với ý nghĩa thực tiễn
Dưới đây là phân tích chi tiết từng thành phần UML được sử dụng trong sơ đồ, kèm theo cách diễn giải thực tế và lý do mô hình hóa.
| # | Thành phần | Ký hiệu | Ý nghĩa & Mục đích | Quyết định mô hình hóa / Nhận xét |
|---|---|---|---|---|
| 1 | Biên giới hệ thống | hình chữ nhật "Nền tảng Giao đồ ăn" |
Xác định phạm vicủa hệ thống đang được mô hình hóa. Tất cả các kịch bản sử dụng bên trong đều là một phần của hệ thống này. | Tên phải ngắn gọn nhưng mô tả rõ ràng. Trong bối cảnh doanh nghiệp, có thể sử dụng các tên dài hơn (ví dụ: “Hệ thống Quản lý Đơn hàng Khách hàng”). |
| 2 | Người dùng chính | actor Khách hàng, actor Tài xế |
Đại diện cho các vai trò bên ngoàikhởi tạo hoặc tham gia vào các kịch bản sử dụng. | Tên cần đơn giản và trực quan. Tránh các định danh không cần thiết như <<người>>trừ khi cần thiết cho các mô hình lớn. |
| 3 | Người dùng có biệt danh | actor "Nhân viên Nhà hàng" as Restaurant |
Cho phép rút ngắn tên người dùng dài và mô tả để tăng tính rõ ràng trong các kết nối. | Rất hiệu quả khi tên người dùng chứa khoảng trắng hoặc quá dài. Giảm sự rườm rà và cải thiện khả năng đọc. |
| 4 | Người dùng hệ thống bên ngoài | actor "Bộ xử lý Thanh toán" as PaymentGW |
Mô hình hóa các hệ thống bên thứ bamà nền tảng tương tác. | Không có định danh «hệ thống» được sử dụng — chấp nhận được trong các sơ đồ nhẹ. Tuy nhiên, việc thêm “«hệ thống» có thể làm rõ ý định trong các hệ thống phức tạp. |
| 5 | Tổng quát hóa Diễn viên | `Khách hàng < | — Khách hàng Đã đăng ký` | Chỉ ra rằng một khách hàng đã đăng ký là một phiên bản chuyên biệt của một khách vãng lai. |
| 6 | Liên kết Thông thường | Khách hàng --> (Duyệt qua Nhà hàng) |
Cho thấy diễn viên khởi tạo hoặc tham gia vào trường hợp sử dụng. | Đường liền = giao tiếp. Hướng được ngầm hiểu từ diễn viên đến trường hợp sử dụng (không cần mũi tên). |
| 7 | Mối quan hệ «include» | (Đặt hàng) ..> (Xử lý thanh toán) : <<include>> |
Xử lý thanh toán là luôn bắt buộc khi đặt hàng. |
Mũi tên chỉ từ phần bao gồm → phần được bao gồm. Điều này là quan trọng: Đặt hàng bao gồm Xử lý thanh toán như một bước bắt buộc. |
| 8 | Mối quan hệ «extend» | (Đặt hàng) <.. (Áp dụng mã giảm giá) : <<extend>> |
Việc áp dụng mã giảm giá là tùy chọn và chỉ xảy ra trong một số điều kiện nhất định. | Mũi tên chỉ từ phần mở rộng → phần cơ sở. Trường hợp sử dụng cơ sở (Đặt hàng) có thể được mở rộng theo điều kiện. |
| 9 | Tổng quát hóa trường hợp sử dụng | `(Xử lý thanh toán) < | — (Thanh toán bằng thẻ)<br>(Xử lý thanh toán) < |
— (Thanh toán qua ví điện tử)` |
| 10 | Ghi chú | ghi chú bên phải của PaymentGWghi chú phía dưới của (Áp dụng mã giảm giá) |
Cung cấp giải thích theo ngữ cảnhvề việc triển khai hoặc các quy tắc kinh doanh. | Ghi chú thường bị sử dụng chưa đầy đủ nhưng cực kỳ hữu ích. Chúng ngăn ngừa hiểu lầm (ví dụ: làm rõ rằng PaymentGW là bên ngoài). |
| 11 | Các vai trò bên ngoài ranh giới | Tất cả vai tròđược khai báo trước hình chữ nhật |
Nhấn mạnh rằng không có vai trò nào là một phần của hệ thống— sự tách biệt rõ ràng giữa các mối quan tâm. | Một trong hai bố cục tiêu chuẩn. Được ưu tiên khi các vai trò nhiều hoặc ở bên ngoài. |
| 12 | Hướng sơ đồ | hướng từ trái sang phải |
Cải thiện bố cục khi có nhiều vai trò ở bên trái. | Nâng cao khả năng đọc. Đặc biệt hiệu quả với 4–8 vai trò. Phương án thay thế: bố cục từ trên xuống cho ít vai trò hơn. |
4. Các quyết định mô hình hóa chính và lý do
✅ Tại sao các vai trò lại nằm ngoài ranh giới hệ thống
- Thực hành tốt nhất: Các vai trò đại diện cho các chức vụ bên ngoàihệ thống.
- Tại sao điều này quan trọng: Ngăn ngừa sự nhầm lẫn giữa các thành phần hệ thống và các thực thể bên ngoài.
- Ví dụ:
Tài xếkhông phải là một mô-đun của nền tảng — họ là một vai trò bên thứ ba tương tác với nó.
📌 Mẹo hay: Nếu tất cả các vai trò nằm trong ranh giới, điều đó sẽ ngụ ý hệ thống bao gồm chúng — điều này gây hiểu lầm.
✅ Tại sao sử dụng Customer <|-- RegCustomer thay vì sao chép các liên kết
- Không có khái quát hóa, bạn sẽ phải vẽ:
PlantUML Edit PlantUML in VPasCode
Customer --> (Duyệt nhà hàng) RegCustomer --> (Duyệt nhà hàng) RegCustomer --> (Đặt hàng) - Với khái quát hóa, bạn chỉ cần:
PlantUML Edit PlantUML in VPasCode
Customer <|-- RegCustomer Customer --> (Duyệt nhà hàng) RegCustomer --> (Đặt hàng) - Kết quả: Biểu đồ sạch hơn, dễ bảo trì hơn.
📌 Thực hành tốt nhất: Sử dụng khái quát hóa vai trò whenever một vai trò chuyên biệt kế thừa tất cả hành vi của một vai trò tổng quát hơn.
✅ Tại sao <<include>> và <<extend>> được sử dụng đúng cách
| Mối quan hệ | Mục đích | Hướng | Ví dụ |
|---|---|---|---|
<<bao gồm>> |
Luồng con bắt buộc | Từ bao gồm → được bao gồm | Đặt hàng phải bao gồm Xử lý thanh toán |
<<mở rộng>> |
Mở rộng tùy chọn | Từ mở rộng → nền tảng | Áp dụng mã giảm giá mở rộng Đặt hàng chỉ nếu mã hợp lệ |
❗ Lỗi phổ biến: Đảo ngược hướng mũi tên. Luôn nhớ:
bao gồm:Nền tảng ..> Được bao gồmmở rộng:Mở rộng <.. Cơ sở
✅ Tại sao Xử lý thanh toán có các phép tổng quát hóa
Thanh toán bằng thẻvàThanh toán ví điện tửlà dạng chuyên biệt củaXử lý thanh toán.- Điều này cho thấy nền tảng hỗ trợ nhiều phương thức thanh toán, nhưng tất cả đều tuân theo quy trình cốt lõi giống nhau.
- Phép tổng quát hóa cho phép hành vi được chia sẻ và khả năng mở rộng trong tương lai.
📌 Trường hợp sử dụng: Việc thêm một phương thức thanh toán mới (ví dụ: Apple Pay) sẽ chỉ là một phép tổng quát hóa khác của
Xử lý thanh toán.
5. Diễn giải thực tế & Câu hỏi đã được trả lời
Sơ đồ này không chỉ là công cụ hỗ trợ trực quan — nó trả lời các câu hỏi quan trọng về kinh doanh và kỹ thuật:
| Câu hỏi | Câu trả lời từ sơ đồ |
|---|---|
| Ai là những người dùng chính? | Khách hàng, Khách hàng đã đăng ký, Nhân viên nhà hàng, Tài xế, Cổng thanh toán |
| Người dùng chưa đăng ký có thể đặt hàng không? | ❌ Không — chỉ Khách hàng đã đăng ký có thể Đặt hàng. Khách hàng chỉ có thể Duyệt qua các nhà hàng. |
| Thanh toán có luôn bắt buộc không? | ✅ Có — Đặt hàng bao gồm Xử lý thanh toán. Bắt buộc. |
| Khách hàng có thể áp dụng mã giảm giá không? | ✅ Có — nhưng chỉ tùy chọn thông qua <<mở rộng>>. Chỉ khi nhập mã hợp lệ. |
| Những phương thức thanh toán nào được hỗ trợ? | Thẻ và Ví điện tử (thông qua khái quát hóa). Hệ thống bên ngoài xử lý việc thanh toán thực tế. |
| Ai xử lý thanh toán? | Hệ thống bên ngoài PaymentGW — không phải là một phần của nền tảng. |
| Các nhà hàng có thể quản lý thực đơn của mình không? | ✅ Có — Nhà hàng người dùng tương tác với Quản lý thực đơn và Chấp nhận / Chuẩn bị đơn hàng. |
✅ Giá trị kinh doanh: Sơ đồ truyền đạt rõ ràng hệ thống làm gì, ai sử dụng nó, và hành vi nào là bắt buộc so với tùy chọn.
6. Các hướng dẫn mô hình hóa phổ biến được thể hiện
Sơ đồ minh họa một số thực tiễn tốt nhất trong mô hình hóa trường hợp sử dụng UML:
| Hướng dẫn | Cách áp dụng |
|---|---|
| Sử dụng tên trường hợp sử dụng định hướng mục tiêu | Đặt hàng, Theo dõi đơn hàng, Áp dụng Mã Khuyến Mãi — tất cả đều bắt đầu bằng một động từ và mô tả mục tiêu của người dùng. |
| Giữ cho sơ đồ dễ đọc | Chỉ 10 trường hợp sử dụng được hiển thị — lý tưởng cho hầu hết các lĩnh vực kinh doanh (khuyến nghị từ 5–12). |
| Hệ thống bên ngoài dưới vai trò tác nhân | PaymentGW được mô hình hóa dưới dạng một tác nhân, không phải là một trường hợp sử dụng. Tách biệt đúng đắn các mối quan tâm. |
| Sử dụng ghi chú để làm rõ sự mơ hồ | Ghi chú giải thích rằng PaymentGW là bên ngoài và rằng mã khuyến mãi là tùy chọn — điều này rất quan trọng để tránh hiểu nhầm. |
| Sử dụng tổng quát hóa tác nhân để giảm sự lộn xộn | `Khách hàng < |
Sử dụng include và extend một cách chính xác |
Phân biệt rõ ràng giữa hành vi bắt buộc và hành vi tùy chọn. |
📌 Cảnh báo: Nhiều sơ đồ sử dụng sai
<<extend>>để có nghĩa là “tùy chọn” mà không hiểu rõ bản chất có điều kiện của các phần mở rộng. Sơ đồ này tránh được lỗi đó.
7. Các cải tiến tiềm năng & Phê bình
Mặc dù sơ đồ rất tốt, nhưng đây là góp ý mang tính xây dựng để tinh chỉnh:
🔧 1. Thêm các ký hiệu (stereotypes) để làm rõ
actor "Payment Processor" as PaymentGW <<system>>
- Tại sao: Làm rõ rằng đây là một hệ thống bên ngoài, không phải vai trò con người.
- Lợi ích: Giảm sự mơ hồ, đặc biệt trong các mô hình lớn.
🔧 2. Làm rõ Áp dụng mã giảm giáĐiều kiện mở rộng
Hiện tại:
note bottom of (Apply Promo Code)
Tùy chọn – chỉ khi nhập mã hợp lệ
end note
- Tốt hơn: Sử dụng một ký hiệu điều kiện hoặc ràng buộc (guard) trong
<<extend>>mũi tên:
(Đặt hàng) <.. (Áp dụng mã giảm giá) : <<extend>> [mã giảm giá hợp lệ]
- Tại sao: Chính xác hơn ghi chú — liên kết trực tiếp phần mở rộng với một điều kiện.
🔧 3. Cân nhắc thêm một Xem lịch sử đơn hàng trường hợp sử dụng
- Hiện đang thiếu, nhưng có khả năng quan trọng đối với cả khách hàng và nhà hàng.
- Có thể được thêm vào như một
Khách hàng đã đăng kýtrường hợp sử dụng.
🔧 4. Nhóm các trường hợp sử dụng liên quan (Tùy chọn)
Đối với các biểu đồ lớn hơn, hãy nhóm các trường hợp sử dụng vào gói:
package "Quản lý đơn hàng" {
(Đặt hàng)
(Theo dõi đơn hàng)
(Áp dụng mã giảm giá)
}
package "Thanh toán" {
(Xử lý thanh toán)
(Sử dụng ví)
(Thanh toán bằng thẻ)
(Thanh toán bằng ví điện tử)
}
- Lợi ích: Cải thiện khả năng mở rộng và tính dễ đọc.
8. Bước tiếp theo là gì?
Case study này đã chỉ ra cách một biểu đồ trường hợp sử dụng được cấu trúc tốt có thể nắm bắt logic kinh doanh phức tạp một cách rõ ràng và ngắn gọn. Để hiểu sâu hơn, dưới đây là các bước tiếp theo được đề xuất:
🔄 Tùy chọn 1: Góc nhìn tập trung vào nhà hàng
Mô hình hóa cùng một miền từ góc độ của nhà hàng:
- Tập trung vào
Quản lý thực đơn,Chấp nhận / Chuẩn bị đơn hàng,Xem đơn hàng,Cập nhật trạng thái. - Hiển thị
Nhà hànglà tác nhân chính. - Bao gồm
Khách hànglà một tác nhân phụ (ví dụ:Khách hànggửi đơn hàng →Nhà hàngnhận nó).
✅ Lợi ích: Làm nổi bật các mục tiêu hệ thống và vai trò của các tác nhân khác nhau.
🔄 Tùy chọn 2: Thêm nhiều điểm mở rộng hơn
Nâng cao Đặt hàng với:
Áp dụng mã giảm giá(nếu mã khuyến mãi không hợp lệ →<<mở rộng>>với thông báo lỗi)Yêu cầu hướng dẫn đặc biệt(tùy chọn)Lên lịch đặt hàng(cho giao hàng trong tương lai)
🔄 Tùy chọn 3: So sánh bao gồm so với mở rộng với ví dụ
| Trường hợp sử dụng | <<bao gồm>> |
<<mở rộng>> |
|---|---|---|
Đặt hàng → Xử lý thanh toán |
✅ Bắt buộc | ❌ Không tùy chọn |
Đặt hàng → Áp dụng mã khuyến mãi |
❌ Không bắt buộc | ✅ Có điều kiện |
Đăng nhập → Xác minh danh tính |
✅ Luôn cần thiết | ❌ Không áp dụng |
Thanh toán → Áp dụng giảm giá |
✅ Luôn luôn | ✅ Chỉ nếu có giảm giá |
📌 Quy tắc chung:
- Sử dụng
<<bao gồm>>khi hành vi phải xảy ra.- Sử dụng
<<mở rộng>>khi hành vi có thể xảy ratrong một số điều kiện nhất định.
🔄 Tùy chọn 4: Chuyển đổi sang Biểu đồ Chuỗi hoặc Biểu đồ Hoạt động
Để phân tích sâu hơn:
- Biểu đồ Chuỗi: Hiển thị luồng của
Đặt hàng→Xử lý thanh toán→Giao hàngvới các tin nhắn giữa các tác nhân và hệ thống. - Biểu đồ hoạt động: Mô hình hóa các điểm ra quyết định trong
Xử lý thanh toán(ví dụ: thẻ bị từ chối → thử lại hoặc chuyển sang ví điện tử).
9. Kết luận
Nghiên cứu điển hình này chứng minh rằng một biểu đồ trường hợp sử dụng được thiết kế tốtkhông chỉ đơn thuần là một bản phác thảo trực quan — nó là một công cụ truyền thông chiến lượccó khả năng:
- Làm rõ phạm vi hệ thống,
- Ghi nhận các quy tắc kinh doanh,
- Định hướng phát triển,
- Ngăn ngừa hiểu lầm.
Biểu đồ Nền tảng Giao hàng Thực phẩm là một ví dụ điển hìnhvề:
- Sử dụng đúng ký hiệu UML,
- Các quyết định mô hình hóa vững chắc,
- Sự tách biệt rõ ràng giữa các mối quan tâm,
- Sử dụng hiệu quả các ghi chú và khái quát hóa.
Bằng cách tuân thủ các nguyên tắc được trình bày ở đây — việc đặt tên hướng đến mục tiêu, việc sử dụng đúng bao gồm/mở rộng, sự tổng quát hóa của vai trò, và việc sử dụng ghi chú một cách chiến lược — bạn có thể tạo các sơ đồ trường hợp sử dụng vừa chính xác và có thể hành động được.
✅ Những điểm chính cuối cùng
| Nguyên tắc | Đã được áp dụng ở đây? | Tại sao điều này quan trọng |
|---|---|---|
| Sử dụng tên trường hợp sử dụng định hướng mục tiêu | ✅ Có | Cải thiện tính rõ ràng và tập trung vào người dùng |
| Giữ kích thước sơ đồ ở mức dễ quản lý | ✅ Có (10 trường hợp sử dụng) | Ngăn ngừa quá tải nhận thức |
| Hệ thống bên ngoài dưới dạng vai trò | ✅ Có | Tách biệt đúng đắn các mối quan tâm |
| Sử dụng ghi chú để cung cấp ngữ cảnh | ✅ Có | Ngăn ngừa hiểu lầm |
| Sử dụng sự tổng quát hóa để giảm sự trùng lặp | ✅ Có | Giúp biểu đồ có khả năng mở rộng và dễ bảo trì |
Chính xác <<include>> và <<extend>> hướng |
✅ Có | Đảm bảo mô hình hóa hành vi chính xác |









