Sequence Diaqramları
Sequence diaqramları UML-in davranış diaqramlarından biridir və obyektlər arasında mesaj mübadiləsinin vaxt ardıcıllığı ilə təsvirini göstərir. Bu diaqramlar sistemin dinamik davranışını, obyektlərin qarşılıqlı əlaqəsini və proseslərin necə baş verdiyini vizual şəkildə təqdim edir.
Sequence diaqramları xüsusilə sistem dizaynı, API dokumentasiyası, biznes proseslərinin təsviri və test ssenarilərinə yazılmasında çox faydalıdır. Onlar zaman faktoru nəzərə alaraq obyektlər arasında olan əlaqələri göstərir və mürəkkəb proseslərin anlaşılmasını asanlaşdırır.
Sequence Diaqramının Əsas Komponentləri
1. Aktor (Actor)
Aktor sistemə xaricdən təsir edən bir varlığı təmsil edir. Bu insan, başqa sistem və ya xarici servis ola bilər.
2. Obyekt (Object)
Sequence diaqramında iştirak edən sistem komponentlərini və ya siniflərin nümunələrini təmsil edir.
3. Lifeline (Həyat Xətti)
Hər aktor və obyekt üçün şaquli xətt çəkilir ki, bu da həmin varlığın diagram müddətində mövcudluğunu göstərir.
4. Aktivasiya Qutusu (Activation Box)
Lifeline üzərində yerləşən və obyektin aktiv olduğu zaman müddətini göstərən düzbucaqlı qutu.
5. Mesaj (Message)
Obyektlər arasında həyata keçirilən kommunikasiya və ya funksiya çağırışları.
6. Return Mesajı
Funksiya çağırışının cavabını və ya nəticəsini göstərən mesaj.
Mesaj Növləri
1. Synchronous Message (Sinxron Mesaj)
- Göndərən obyekt cavab gözləyir
- Dolu ox başı ilə gösterilir:
→
2. Asynchronous Message (Asinxron Mesaj)
- Göndərən obyekt cavab gözləmir
- Açıq ox başı ilə gösterilir:
⇢
3. Return Message (Qayıdış Mesajı)
- Funksiya çağırışının nəticəsi
- Qırıqlı xətt ilə gösterilir:
⇠
4. Self Message (Özünə Mesaj)
- Obyekt öz metodunu çağırır
- Lifeline üzərində dövrə şəkil alır
5. Create Message (Yaratma Mesajı)
- Yeni obyektin yaradılması
<<create>>stereotipi ilə işarələnir
6. Destroy Message (Məhv Etmə Mesajı)
- Obyektin məhv edilməsi
<<destroy>>stereotipi ilə işarələnir və lifeline X ilə bitir
Praktik Nümunə: Onlayn Sifariş Sistemi
Sadə Sifariş Prosesi
sequenceDiagram
participant U as User
participant S as System
participant DB as Database
participant PS as Payment Service
participant ES as Email Service
U->>S: Login
S->>DB: Verify credentials
DB-->>S: User authenticated
S-->>U: Login successful
U->>S: Browse products
S->>DB: Get product list
DB-->>S: Product data
S-->>U: Display products
U->>S: Add to cart
S->>S: Update cart session
S-->>U: Cart updated
U->>S: Proceed to checkout
S->>DB: Validate cart items
DB-->>S: Items valid
S-->>U: Show checkout page
U->>S: Submit payment info
S->>PS: Process payment
PS-->>S: Payment successful
S->>DB: Create order
DB-->>S: Order created
S->>ES: Send confirmation email
ES-->>S: Email sent
S-->>U: Order confirmation
Detallı E-ticarət Sifariş Prosesi
Mürəkkəb Sequence Diaqramı
sequenceDiagram
participant C as Customer
participant W as Web Frontend
participant A as API Gateway
participant AS as Auth Service
participant OS as Order Service
participant PS as Product Service
participant IS as Inventory Service
participant PayS as Payment Service
participant NS as Notification Service
participant DB as Database
%% Authentication
C->>W: Login request
W->>A: POST /auth/login
A->>AS: Authenticate user
AS->>DB: Verify credentials
DB-->>AS: User data
AS-->>A: JWT token
A-->>W: Authentication response
W-->>C: Login successful
%% Product browsing
C->>W: Browse products
W->>A: GET /products
A->>PS: Get products
PS->>DB: Query products
DB-->>PS: Product list
PS-->>A: Product data
A-->>W: JSON response
W-->>C: Display products
%% Add to cart
C->>W: Add item to cart
W->>A: POST /cart/add
A->>AS: Validate token
AS-->>A: Token valid
A->>IS: Check availability
IS->>DB: Check stock
DB-->>IS: Stock available
IS-->>A: Item available
A->>W: Item added
W-->>C: Cart updated
%% Checkout process
C->>W: Proceed to checkout
W->>A: POST /orders/create
A->>AS: Validate token
AS-->>A: Token valid
A->>OS: Create order
OS->>IS: Reserve items
IS->>DB: Update inventory
DB-->>IS: Items reserved
IS-->>OS: Items reserved
OS->>DB: Save order
DB-->>OS: Order saved
OS-->>A: Order created
A-->>W: Order response
W-->>C: Show payment page
%% Payment processing
C->>W: Submit payment
W->>A: POST /payments/process
A->>PayS: Process payment
PayS->>PayS: Validate card
PayS-->>A: Payment successful
A->>OS: Confirm payment
OS->>DB: Update order status
DB-->>OS: Status updated
OS->>NS: Send notifications
NS->>NS: Prepare email
NS-->>OS: Notification sent
OS-->>A: Order confirmed
A-->>W: Payment confirmation
W-->>C: Order successful
%% Error handling (alternative flow)
Note over PayS: If payment fails
PayS-->>A: Payment failed
A->>OS: Cancel order
OS->>IS: Release reserved items
IS->>DB: Update inventory
DB-->>IS: Items released
IS-->>OS: Items released
OS-->>A: Order cancelled
A-->>W: Payment error
W-->>C: Payment failed message
PlantUML ilə Sequence Diaqramı
Kitabxana Sistemi Nümunəsi
@startuml
participant Member
participant LibrarySystem as LS
participant Database as DB
participant BookService as BS
participant NotificationService as NS
Member -> LS : searchBook("Java Programming")
activate LS
LS -> DB : findBooks("Java Programming")
activate DB
DB --> LS : bookList
deactivate DB
LS --> Member : displaySearchResults(bookList)
Member -> LS : borrowBook(bookId, memberId)
LS -> BS : checkAvailability(bookId)
activate BS
BS -> DB : getBookStatus(bookId)
activate DB
DB --> BS : bookAvailable
deactivate DB
alt book available
BS -> DB : updateBookStatus(bookId, "borrowed")
activate DB
DB --> BS : statusUpdated
deactivate DB
BS -> DB : createBorrowRecord(bookId, memberId)
DB --> BS : recordCreated
deactivate DB
BS --> LS : borrowSuccessful
LS -> NS : sendConfirmationEmail(memberId, bookId)
activate NS
NS --> LS : emailSent
deactivate NS
LS --> Member : borrowConfirmation
else book not available
BS --> LS : bookNotAvailable
LS --> Member : errorMessage("Book not available")
end
deactivate BS
deactivate LS
@enduml
Sequence Diaqramında İstifadə Olunan Konstruksiyalar
1. Alt/Else (Alternativ)
sequenceDiagram
participant User
participant System
participant Database
User->>System: Login attempt
System->>Database: Validate credentials
alt credentials valid
Database-->>System: User authenticated
System-->>User: Login successful
else credentials invalid
Database-->>System: Authentication failed
System-->>User: Login failed
end
2. Loop (Təkrarlama)
sequenceDiagram
participant User
participant System
participant EmailService
loop for each subscriber
System->>EmailService: Send newsletter
EmailService-->>System: Email sent
end
System-->>User: All emails sent
3. Par (Paralel Proseslər)
sequenceDiagram
participant User
participant OrderSystem
participant PaymentService
participant InventoryService
User->>OrderSystem: Place order
par Process payment
OrderSystem->>PaymentService: Process payment
PaymentService-->>OrderSystem: Payment confirmed
and Update inventory
OrderSystem->>InventoryService: Reserve items
InventoryService-->>OrderSystem: Items reserved
end
OrderSystem-->>User: Order confirmed
4. Opt (İxtiyari)
sequenceDiagram
participant User
participant System
participant NotificationService
User->>System: Complete purchase
System-->>User: Purchase successful
opt Send receipt email
System->>NotificationService: Send receipt
NotificationService-->>System: Receipt sent
end
5. Break (Fasilə)
sequenceDiagram
participant User
participant System
participant Database
User->>System: Request data
System->>Database: Query data
break database error
Database-->>System: Connection failed
System-->>User: Service unavailable
end
Database-->>System: Data retrieved
System-->>User: Display data
6. Critical (Kritik Bölgə)
sequenceDiagram
participant User1
participant User2
participant System
participant Database
par User1 process
User1->>System: Update balance
critical Atomic operation
System->>Database: Lock account
System->>Database: Update balance
System->>Database: Unlock account
end
System-->>User1: Balance updated
and User2 process
User2->>System: Check balance
System->>Database: Get balance
Database-->>System: Balance data
System-->>User2: Display balance
end
Sequence Diaqramı Best Practice-ləri
1. Aydın Adlandırma
✅ Düzgün:
- getUserProfile()
- processPayment()
- sendNotification()
❌ Yanlış:
- doSomething()
- process()
- handle()
2. Məntiqli Qruplaşdırma
Əlaqədar mesajları bir yerdə saxlayın
Sequence-i sol-sağ istiqamətində təşkil edin
Çox uzun diaqramları alt-diaqramlara bölün
3. Səhv Hallarının Nəzərə Alınması
sequenceDiagram
participant User
participant System
participant PaymentGateway
User->>System: Make payment
System->>PaymentGateway: Process payment
alt Payment successful
PaymentGateway-->>System: Success response
System-->>User: Payment confirmed
else Payment failed
PaymentGateway-->>System: Error response
System-->>User: Payment failed
else Network timeout
System-->>User: Please try again
end
4. Return Mesajlarının İstifadəsi
sequenceDiagram
participant Client
participant Server
participant Database
Client->>+Server: getUserData(userId)
Server->>+Database: SELECT * FROM users WHERE id = ?
Database-->>-Server: UserData
Server-->>-Client: UserData
Mikroservis Arxitekturasında Sequence Diaqramları
API Gateway Pattern
sequenceDiagram
participant Client
participant Gateway as API Gateway
participant Auth as Auth Service
participant User as User Service
participant Order as Order Service
participant Product as Product Service
Client->>Gateway: GET /api/user/orders
Gateway->>Auth: Validate token
Auth-->>Gateway: Token valid
Gateway->>User: GET /users/{id}
User-->>Gateway: User data
Gateway->>Order: GET /orders?userId={id}
Order->>Product: GET /products/{ids}
Product-->>Order: Product details
Order-->>Gateway: Orders with products
Gateway-->>Client: Combined response
Event-Driven Architecture
sequenceDiagram
participant Order as Order Service
participant Queue as Message Queue
participant Inventory as Inventory Service
participant Payment as Payment Service
participant Notification as Notification Service
Order->>Queue: Publish OrderCreated event
par Inventory update
Queue->>Inventory: OrderCreated event
Inventory->>Inventory: Update stock
Inventory->>Queue: Publish StockUpdated event
and Payment processing
Queue->>Payment: OrderCreated event
Payment->>Payment: Process payment
Payment->>Queue: Publish PaymentProcessed event
and Notification
Queue->>Notification: OrderCreated event
Notification->>Notification: Send confirmation
end
Test Ssenariləri üçün Sequence Diaqramları
API Test Ssenarisi
sequenceDiagram
participant Test as Test Case
participant API
participant DB as Mock Database
Note over Test: Setup test data
Test->>DB: Insert test user
Test->>DB: Insert test products
Note over Test: Execute test
Test->>API: POST /auth/login
API-->>Test: JWT token
Test->>API: GET /products (with token)
API-->>Test: Product list
Test->>API: POST /orders (with token)
API-->>Test: Order created
Note over Test: Verify results
Test->>DB: Verify order saved
Test->>Test: Assert response data
Note over Test: Cleanup
Test->>DB: Delete test data
Sequence Diaqramı Alətləri
1. Onlayn Vasitələr
- Mermaid.js: Markdown-friendly
- SequenceDiagram.org: Sadə və sürətli
- WebSequenceDiagrams: Professional
- Draw.io: Vizual editor
2. Desktop Tətbiqlər
- StarUML: Professional UML suite
- Visual Paradigm: Tam funksiyalı
- Enterprise Architect: Korporativ həll
- PlantUML: Text-based
3. IDE Plugin-ləri
- IntelliJ IDEA: Sequence diagram plugin
- VS Code: Mermaid extension
- Eclipse: UML plugins
- Sublime Text: PlantUML plugin
Ümumi Səhvlər və Onlardan Çəkinmə
1. Çox Mürəkkəb Diaqramlar
Səhv: Bütün detalları bir diaqramda göstərmək
Düzgün: Hər scenario üçün ayrı diaqram yaratmaq
2. Vaxt Ardıcıllığını Pozmaq
Səhv: Mesajları təsadüfi sırayla göstərmək
Düzgün: Real-time sequence-i izləmək
3. Return Mesajlarını Unutmaq
Səhv: Yalnız request mesajlarını göstərmək
Düzgün: Response mesajlarını da daxil etmək
4. Activation Box-ların Yanlış İstifadəsi
Səhv: Bütün lifeline-də aktivasiya göstərmək
Düzgün: Yalnız aktiv olduqda activation box istifadə etmək
Performance və Scalability Göstəricisi
Zaman Məhdudiyyətləri
sequenceDiagram
participant User
participant System
participant Database
User->>System: Request data
Note over System,Database: Max 5 seconds timeout
System->>Database: Complex query
Database-->>System: Large dataset
Note over System: Process data (2 seconds)
System-->>User: Filtered results
Note over User,System: Total: 4 seconds < 5 seconds limit
Caching Strategiyası
sequenceDiagram
participant User
participant API
participant Cache
participant Database
User->>API: GET /products/popular
API->>Cache: Check cached data
alt Cache hit
Cache-->>API: Cached products
API-->>User: Products (fast response)
else Cache miss
API->>Database: Query popular products
Database-->>API: Product data
API->>Cache: Store in cache
API-->>User: Products (slower response)
end
Nəticə
Sequence diaqramları proqram təminatı inkişafının müxtəlif mərhələlərində vacib rol oynayır:
- Dizayn mərhələsində: Obyektlər arası qarşılıqlı əlaqənin planlaşdırılması
- İmplementasiya zamanı: API çağırışlarının ardıcıllığının təyin edilməsi
- Test mərhələsində: Test ssenarilərinə yaradılması
- Sənədləşdirmədə: Sistem davranışının vizual təsviri
- Debug prosesində: Sistem axınının təhlil edilməsi
Düzgün hazırlanmış sequence diaqramları:
- Mürəkkəb proseslərin anlaşılmasını asanlaşdırır
- Komanda üzvləri arasında ünsiyyəti təkmilləşdirir
- API dizaynının optimallaşdırılmasına kömək edir
- Test coverage-in artırılmasında istiqamət verir
- Sistem performansının təhlil edilməsini dəstəkləyir