Biểu đồ Use Case, một phần quan trọng của Unified Modeling Language (UML), giúp làm nổi bật các chức năng chính của hệ thống qua lăng kính của người dùng cuối.
Cho nên, việc hiểu và áp dụng đúng các mối quan hệ trong biểu đồ Use Case là chìa khóa để mô tả chính xác các yêu cầu và tương tác của hệ thống. Trong bài viết này, chúng ta sẽ đi sâu vào giải thích các mối quan hệ trong biểu đồ Use Case và cách áp dụng chúng thông qua các ví dụ cụ thể.
1. Association (Liên kết)
- Ký hiệu: Đường thẳng nối giữa một Actor và một Use case.
- Mô tả: Liên kết chỉ ra một mối quan hệ tương tác giữa một Actor và một Use Case. Điều này có nghĩa là Actor thực hiện hoặc tham gia vào quy trình của Use case đó. Mối quan hệ này không chỉ giới hạn ở người dùng cuối mà còn có thể mở rộng ra các hệ thống bên ngoài hoặc các quy trình tự động.
- Ví dụ: Trong hệ thống cho mượn sách, actor Member (người dùng đã đăng ký thẻ thành viên) có quyền thực hiện hành động mượn sách (Borrow book) và trả sách (Return book).
2. Extend (Mở rộng)
- Ký hiệu: Đường nét đứt kết thúc bằng một mũi tên rỗng và có chữ
<<extend>>
ở giữa hoặc bên cạnh đường nét đứt. - Mô tả: Mối quan hệ mà trong đó một use case mở rộng hành vi của một use case khác. Use case "mở rộng" cung cấp hành vi bổ sung cho use case được mở rộng và chỉ được thực thi dưới một số điều kiện nhất định. Điều này giống như việc "nếu - thì" trong lập trình, nơi mà hành vi bổ sung chỉ được kích hoạt dưới một số điều kiện cụ thể. Ký hiệu này giúp định nghĩa các tính năng tùy chọn hoặc mở rộng mà không làm phức tạp hóa use case chính.
- Ví dụ: Trong hệ thống cho mượn sách, use case "Gia hạn sách" được mở rộng từ use case "Mượn sách". Member chỉ được gia hạn sách khi thẻ thành viên vẫn còn hạn và số ngày mượn liên tiếp cùng 1 cuốn sách không vượt quá 30 ngày.
3. Include (Bao gồm)
- Ký hiệu: Đường nét đứt kết thúc bằng một mũi tên rỗng và có chữ
<<include>>
ở giữa hoặc bên cạnh đường nét đứt. - Mô tả: Mối quan hệ include mô tả việc một use case không thể hoàn thành mục tiêu của mình mà không có hành vi được định nghĩa trong use case khác. Điều này nghĩa là use case "bao gồm" là một phần không thể tách rời của use case ban đầu. Điều này giúp tái sử dụng hành vi giữa các use case, làm cho mô hình trở nên gọn gàng và dễ quản lý hơn.
- Ví dụ: Trong hệ thống cho mượn sách, hành động trả sách (Return book) bao gồm hành động mượn sách (Borrow book).
4. Generalization (Tương tác tổng hợp/phụ thuộc)
- Ký hiệu: Đường nét đứt kết thúc bằng một mũi tên rỗng nhưng không có từ khóa. Nó giống như mối quan hệ kế thừa trong lập trình hướng đối tượng.
- Mô tả: Generalization thường được áp dụng cho các Actor hoặc Use Case khi có một quan hệ "là một" hoặc kế thừa.
- Ví dụ: Trong hệ thống cho mượn sách, Actor "Member" (người dùng đã đăng ký thẻ thành viên) là phiên bản cụ thể của Actor "User" (chỉ người dùng của hệ thống) với quyền được đọc, mượn và trả sách.
5. Ví dụ
Hãy xem xét một hệ thống cho mượn sách để minh họa các mối quan hệ này:
Dưới đây là những requirement của hệ thống:
- Mô hình kinh doanh chủ yếu từ việc cho mượn sách.
- Người dùng phải đăng ký thẻ thành viên để thuê sách, với mức phí làm thẻ dựa trên các gói Basic, Standard và Premium. Người dùng có thể thanh toán bằng tiền mặt hoặc qua ví điện tử.
- Khi người dùng đăng ký mượn sách, nếu sách đã bị thành viên khác mượn, hệ thống sẽ ghi nhận lại và thông báo qua email và tin nhắn khi sách được hoàn trả.
- Khi người dùng đăng ký mượn sách, nếu sách không tồn tại trong hệ thống thì hệ thống sẽ ghi nhận và thông báo qua email và tin nhắn khi sách được nhập về.
- Thủ thư là người tiếp nhận các yêu cầu đăng ký thành viên, mượn/trả sách.
- Hệ thống sẽ gửi email đề xuất các đầu sách phù hợp cho từng thành viên.
Từ những requirement trên, chúng ta thấy hệ thống bao gồm có 3 actor: thành viên (member), thủ thư (librarian) và hệ thống (system).
Các use case của hệ thống bao gồm:
- Đăng ký thẻ thành viên (Register for a membership card)
- Thanh toán (Payment) bằng tiền mặt (With cash) hoặc bằng ví điện tử (With eWallet).
- Mượn sách (Borrow book)
- Trả sách (Return book)
- Đăng ký mượn sách chưa có trong cửa hàng (Pre-register if book is not available).
- Đặt hàng sách mới (Restock book).
- Thông báo sách được trả qua email (Notify return timings via email).
- Thông báo sách được trả qua tin nhắn (Notify return timings via phone message).
- Thông bao sách mới đã về qua email (Notify restock timings via email).
- Thông bao sách mới đã về qua tin nhắn (Notify restock timings via phone message).
Các mối quan hệ của hệ thống:
- Association: Một Actor "Member" liên kết với use case "Borrow book", biểu thị rằng người dùng là thành viên có thể thực hiện hành động mượn sách.
- Extend: Use Case "Gia hạn Sách" mở rộng từ Use Case "Mượn Sách" dưới điều kiện sách đó chưa quá hạn.
- Include: Use Case "Đăng ký nhận thông tin về sách mới" bao gồm trong cả hai use case "Borrow book" để đảm bảo sách có sẵn.
- Generalization: Actor "Member" là một phiên bản cụ thể của "User" với quyền đọc, mượn và trả sách. Actor "Librarian"
Tôi vẽ được use case diagram như hình dưới. Trong đó, hình chữ nhật màu xanh lá biểu diễn cho hệ thống. Các hình elip màu trắng nằm trong hình chữ nhật xanh lá là các use case của hệ thống. Hình người là các actor. Người dùng trong hệ thống sẽ có 2 loại là member và librarian.
6. Tổng kết
- Use case diagram là một UML quan trọng trong phát triển phần mềm. Nó được biểu diễn bằng mối quan hệ giữa actor và use case.
- Có 4 loại mối quan hệ chính trong use case diagram: association, extend, include và generalization.
- Association là mối quan hệ chỉ ra Actor thực hiện hoặc tham gia vào quy trình của Use case đó.
- Extend mô tả mối quan hệ mà trong đó một use case mở rộng hành vi của một use case khác. Use case "mở rộng" cung cấp hành vi bổ sung cho use case được mở rộng và chỉ được thực thi dưới một số điều kiện nhất định.
- Include mô tả việc một use case không thể hoàn thành mục tiêu của mình mà không có hành vi được định nghĩa trong use case khác.
- Generalization thường được áp dụng cho các Actor hoặc Use case khi có một quan hệ "là một" hoặc kế thừa.
Đọc thêm các bài blog tại 200Lab
Bài viết liên quan
Cách Discord Lưu Trữ Hàng Nghìn Tỷ Tin Nhắn Với ScyllaDB
Dec 06, 2024 • 9 min read
Idempotent Consumer: Xử lý thông điệp trùng lặp trong Microservices
Dec 04, 2024 • 7 min read
Hướng dẫn tích hợp Redux và React Query trong dự án React Vite
Nov 22, 2024 • 8 min read
Giới thiệu Kiến trúc Backend for Frontend (BFF)
Nov 16, 2024 • 10 min read
Flask là gì? Hướng dẫn tạo Ứng dụng Web với Flask
Nov 15, 2024 • 7 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read