- vừa được xem lúc

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

0 0 32

Người đăng: Đàm Tiến Hùng

Theo Viblo Asia

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Phân tích thiết kế hệ thống thông tin sử dụng biểu đồ UML (Phần 2)

Trong phần 1 tôi đã giới thiệu với các bạn khái quát về phân tích thiết kế hệ thống thông tin sử dụng biểu đồ UML và 2 dạng biểu đồ ca sử dụng(Use Case Diagram) và biểu đồ lớp (Class Diagram). Trong phần này tôi sẽ tiếp tục giới thiệu tới các bạn một số dạng biểu đồ UML được sử nhiều trong các thiết

0 0 49

- vừa được xem lúc

Sơ đồ sequence diagram: Tất tần tật thông tin quan trọng bạn cần nắm

Sơ đồ sequence diagram, hay còn gọi là sơ đồ tuần tự, là một công cụ quan trọng trong quá trình phân tích và thiết kế hệ thống phần mềm.sơ đồ này mô tả cách thức các đối tượng tương tác với nhau theo

0 0 10

- vừa được xem lúc

Một số thủ thuật hay ho với Linux (1).

1. Ctrl + x + e. Giữ CTRL, nhấn phím x rồi nhấn phím e. Thao tác này sẽ mở ra editor mặc định (echo $EDITOR | $VISUAL để kiểm tra) chứa sẵn.

0 0 45

- vừa được xem lúc

How to deploy Amplication app to DigitalOcean

This article shows you the way to deploy an app generated by Amplication to DigitalOcean. Amplication provides the dockerfile to use containers for deployment, but this blog explains how to do it manu

0 0 53

- vừa được xem lúc

Có gì mới trong Laravel 9.0?

Laravel v9 là phiên bản LTS tiếp theo của Laravel và ra mắt vào tháng 2 năm 2022. Trong bài viết này, mình xin giới thiệu một vài tính năng mới trong Laravel trong Laravel 9.

0 0 78

- vừa được xem lúc

Xây dựng trang web tra cứu ảnh sử dụng phân cụm Spectral Clustering

1. Tổng quan tra cứu ảnh. 1.1.

0 0 45