Thiết kế Sequence Diagram sử dụng PlantUML

Tổng quan Sequence Diagram (biểu đồ tuần tự) mô tả luồng hoạt động một số chức năng quan trọng/phức tạp. Ví dụ chức năng thanh toán, chức năng booking. Với những chức năng phức tạp, với các workflow chồng chéo, việc xây dựng tài liệu Sequence Diagram là rất cần thiết và còn giúp các

Tổng quan

Sequence Diagram (biểu đồ tuần tự) mô tả luồng hoạt động một số chức năng quan trọng/phức tạp. Ví dụ chức năng thanh toán, chức năng booking. Với những chức năng phức tạp, với các workflow chồng chéo, việc xây dựng tài liệu Sequence Diagram là rất cần thiết và còn giúp các thành viên mượng tượng rõ ràng hơn về quy trình vận hành, workflow của các chức năng.

Biểu đồ tuần tự là biểu đồ dùng để xác định các trình tự diễn ra sự kiện của một nhóm đối tượng nào đó. Nó miêu tả chi tiết các thông điệp được gửi và nhận giữa các đối tượng đồng thời cũng chú trọng đến việc trình tự về mặt thời gian gửi và nhận các thông điệp đó.

Hướng dẫn

1. Các thành phần trong Sequence Diagram

Để hiểu sơ đồ tuần tự (sequence diagram) là gì, trước tiên, chúng ta nên làm quen với các ký hiệu và thành phần của nó. Sơ đồ tuần tự được tạo thành từ các thành phần sau:

Tên Kí hiệu (hình vẽ) Code Mô tả
Đối tượng (Object, Class) @startuml

participant User

@enduml

Đại diện cho một lớp (class) hoặc đối tượng (object). Kí hiệu đối tượng cho thấy một đối tượng sẽ hoạt động như thế nào trong bối cảnh của hệ thống.
Activation box @startuml

participant User
participant "First Class" as A
User -> A: DoWork
activate A

A --> User: Done
deactivate A

@enduml

Đại diện cho thời gian cần thiết cho một đối tượng để hoàn thành một tác vụ. Nhiệm vụ sẽ nhiều thời gian, activation box càng dài.
Actor @startuml

actor User

@enduml

Hiển thị các thực thể tương tác với hoặc bên ngoài hệ thống.
Lifeline

@startuml

participant User

@enduml

@startuml

actor User

@enduml

Đại diện cho thời gian trôi qua. Hiển thị các sự kiện tuần tự xảy ra với một đối tượng trong tất cả quá trình.
Message Thông điệp giao tiếp giữa các lớp và đối tượng
Synchronous message @startuml

participant Client
participant Server

Client -> Server

@enduml

Được sử dụng khi người gửi phải chờ phản hồi thông điệp trước khi có những hành động tiếp theo. Sơ đồ phải hiển thị cả yêu cầu và trả lời.
Reply message @startuml

participant Client
participant Server

Client <-- Server

@enduml

Thông điệp trả lời cho những yêu cầu.
Asynchronous message @startuml

participant Client
participant Server

Client ->> Server

@enduml

Không yêu cầu phản hồi trước khi người gửi tiếp tục.
Asynchronous return message @startuml

participant Client
participant Server

Client <<-- Server

@enduml

Trả lời thông điệp kiểu không đồng bộ.
Create message @startuml

participant Client
participant Server

Client -> Server: <<createRequest>>
Server --> Client: Created

@enduml

Thông điệp thông báo tạo một lớp hoặc đối tượng
Delete message @startuml

participant Client
participant Server

Client -> Server: DoWork
activate Client
Server --> Client: WorkDone
destroy Server
deactivate Client

@enduml

Thông điệp thông báo hủy một lớp hoặc đối tượng
Loop @startuml

participant Client
participant Server

Client ->> Server: report
loop until reporting Client ends
Client -->> Server: report
end loop

@enduml

Được sử dụng để mô hình hóa các kịch bản if/then tức là, một kịch bản sẽ chỉ xảy ra trong một số điều kiện nhất định.
Alternative @startuml

participant Client
participant Server

Client -> Server: Authentication Request
alt successful case
Server -> Client: Authentication Accepted
else some kind of failure
Server -> Client: Authentication Failure
else Another type of failure
Server -> Client: Please repeat
end

@enduml

Tượng trưng cho một sự lựa chọn giữa hai hoặc nhiều message.
Group @startuml

participant Client
participant Server

group Working
Client -> Server: DoWork
activate Client
Server --> Client: WorkDone
destroy Server
deactivate Client
end

@enduml

Gom nhóm các messages hoặc box

2. Cách thiết kế Sequence Diagram với PlantUML

Sau khi đã làm quen với các kí hiệu và cách thức sử dụng chúng, chúng ta sẽ đi vào xây dựng một Sequence Diagram với PlanUML bằng một ví dụ cụ thể là chức năng rút tiền ở cây ATM.

Step 1: Xác định các chức năng cần thiết kế

  • Dựa vào Use Case Diagram / User Story hay Requirement mà lựa chọn chức năng để thiết kế.
    Chú ý: mỗi chức năng là một Sequence Diagram riêng biệt.

Step 2: Xác định các bước để thực hiện

  • Người dùng nhập đưa thẻ vào cây ATM
  • Người dùng nhập mã pin và hệ thống kiểm tra mã pin
  • Nếu sai thì thông báo cho người dùng, ngược lại thì hiển thị danh sách chức năng (Kiểm tra số dư, rút tiền)
  • Với trường hợp kiểm tra số dư, hệ thống lấy thông tin số dư và trả về thông tin số dư cho người dùng
  • Với trường hợp rút tiền, sẽ có 2 trường hợp xảy ra: đủ số dư để rút và không đủ số dư để rút
  • In hoá đơn, trả thẻ, xác nhận người dùng nhận lại thẻ khi kết thúc quá trình giao dịch

Step 3: Xác định đối tượng tham gia

  • Actor thể hiện người dùng
  • Cây ATM là phương tiện giao tiếp giữ người dùng và server
  • Server là nơi lưu trữ và xử lý yêu cầu (có thể tách xử lý yêu cầu ra thành một cotrol riêng biệt)

Sơ đồ kết quả:

Source code:

@startuml 
actor User as user 
boundary "Cây ATM" as atm_machine 
database "Server Ngân Hàng" as bank_server 
 
user -> atm_machine: Nhập thẻ 
activate user 
activate atm_machine 
atm_machine -->> user: Yêu cầu mã PIN 
user -> atm_machine: Nhập mã PIN 
atm_machine -> bank_server: Kiểm tra mã PIN 
activate bank_server 
bank_server -->> atm_machine: Xác nhận mã PIN 
deactivate bank_server 
atm_machine -->> user: Hiển thị danh sách lựa chọn 
user -> atm_machine: Nhập lựa chọn 
 
alt Lựa chọn Kiểm tra số dư 
  atm_machine ->  bank_server: Lấy số dư 
  activate bank_server 
  bank_server -->> atm_machine: Trả về số dư 
  deactivate bank_server 
  atm_machine -->> user: Hiển thị số dư 
else Lựa chọn rút tiền 
  atm_machine -->> user: Yêu cầu nhập số tiền 
  user -> atm_machine: Nhập số tiền 
  atm_machine -> bank_server: Kiểm tra số dư 
  activate bank_server 
  bank_server -->> atm_machine: Trả về số dư 
  deactivate bank_server 
  alt Số dư > Số tiền muốn rút 
    atm_machine -> bank_server: Cập nhật số dư 
    activate bank_server 
    bank_server -->> atm_machine: Số dư đã được cập nhật 
    deactivate bank_server 
    atm_machine -->> user: Thông báo "Hãy nhận tiền" 
    user ->  atm_machine: Nhận tiền 
  else Số dư < Số tiền muốn rút 
    atm_machine -->> user: Thông báo "Số dư không đủ để giao dịch" 
  end 
else Hủy 
  atm_machine -->> user: Thông báo "Giao dịch đã bị hủy" 
end 
 
atm_machine -->> user: In hóa đơn 
atm_machine -->> user: Trả thẻ 
user -> atm_machine: Nhận lại thẻ 
atm_machine -->> user: Hiển thị cảm ơn 
destroy atm_machine 
destroy user 
 
deactivate user 
deactivate atm_machine 
 
@enduml

Tạm kết

Sequence Diagram là bản vẽ để xác định các đối tượng cũng như tuần tự các bước để thực hiện một bài toán, một chương trình. Sequence Diagram được dùng để thiết kế phát triển và test các chức năng.

Tài liệu tham khảo

Tài liệu tham khảo về công cụ PlantUML: https://plantuml.com/

https://plantuml.com/sequence-diagram

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ