DDD: Phần 12 – EventStorming – Mô hình hóa nghiệp vụ bằng cộng tác

“EventStorming là một hoạt động low-tech nhưng mang lại hiệu quả high-value.”


🎯 Mục tiêu của EventStorming

  • Khai phá tri thức miền (domain knowledge) một cách nhanh chóng, hiệu quả
  • Đồng bộ ngôn ngữ chung (ubiquitous language) giữa các nhóm
  • Phát hiện bounded context, aggregate, domain events
  • Khởi đầu cho mô hình hóa domain hoặc triển khai event-sourced model

🧠 EventStorming là gì?

  • Là một workshop cộng tác để mô hình hóa quy trình nghiệp vụ dưới dạng domain events
  • Người tham gia viết các sự kiện đã xảy ra (domain events, thì quá khứ) bằng sticky note màu cam → sắp xếp theo dòng thời gian
  • Dần dần bổ sung thêm các yếu tố như: command, actor, read model, external system…

👥 Ai nên tham gia?

  • Bất kỳ ai liên quan đến business domain:
    • Kỹ sư phần mềm
    • Domain expert
    • Product Owner
    • Tester, Support, UI/UX…

🔑 Chỉ nên từ 5–10 người để đảm bảo mọi người đều có thể đóng góp hiệu quả.


🧰 Cần chuẩn bị gì?

Thành phầnVai trò
📄 Tường/bảng lớnKhông gian mô hình hóa
🟧 Sticky note nhiều màuMỗi màu biểu diễn 1 loại thành phần
✍️ Bút viếtMỗi người đều phải có
🍎 Đồ ăn nhẹWorkshop kéo dài 2–4h
🚫 GhếHạn chế ngồi – khuyến khích vận động, quan sát

🔟 Quy trình 10 bước EventStorming

1. 🧠 Unstructured Exploration – viết domain events

  • Dùng sticky cam → viết sự kiện đã xảy ra trong quy trình nghiệp vụ
  • Không cần sắp xếp hay lọc trùng, chỉ cần brainstorm hết mức có thể

2. ⏱️ Timeline – sắp xếp theo dòng thời gian

  • Bắt đầu với happy path
  • Sau đó thêm nhánh phụ, điều kiện lỗi, nhánh rẽ logic
  • Có thể vẽ mũi tên biểu diễn dòng chảy (flows)

3. 💢 Pain Points – xác định điểm nghẽn

  • Dùng sticky hồng hình thoi
  • Đánh dấu chỗ có vấn đề:
    • Thiếu kiến thức miền
    • Bottleneck
    • Thủ công cần tự động hóa

4. 🚧 Pivotal Events – mốc chuyển pha

  • Là các sự kiện “thay đổi trạng thái lớn”, ví dụ: “Order initialized”, “Order shipped”
  • Dùng vạch dọc phân cách → gợi ý bounded context boundary

5. 🧾 Commands – điều gì dẫn đến event

  • Dùng sticky xanh nhạt, ghi theo câu lệnh (thì mệnh lệnh): “Submit order”
  • Gắn actor thực hiện (customer, admin…) bằng sticky nhỏ vàng

6. 🧃 Policies – tự động hóa

  • Khi event xảy ra → trigger command → gọi là policy
  • Dùng sticky tím
  • Ghi thêm điều kiện nếu có: “Only for VIP customer”

7. 👀 Read Models

  • Actor cần nhìn thấy gì trước khi ra quyết định? có thể là môt thông báo, màn hình báo cáo, …
  • Ví dụ: “Shopping cart summary”
  • Sticky xanh lá, nằm trước command

8. 🌐 External Systems

  • Hệ thống bên ngoài gọi command hoặc nhận event
  • Sticky hồng
  • Ví dụ: CRM gọi “Ship Order”, hoặc nhận event “Order Confirmed”

9. 🧱 Aggregates

  • Nhóm các command – event có liên hệ thành một aggregate
  • Sticky vàng lớn
  • Mỗi aggregate sẽ có command vào và event sinh ra

10. 🗂️ Bounded Context

  • Gom các aggregate có liên hệ logic/chức năng thành bounded context
  • Bắt đầu xác định ranh giới kỹ thuật và ngôn ngữ

🧪 Kết quả của EventStorming là gì?

Thành quả hữu hìnhÝ nghĩa
🔶 Timeline domain eventsHiểu rõ business flow
🧱 Aggregate được hình thànhChuẩn bị cho modeling
🗂️ Bounded context rõ ràngGợi ý chia hệ thống thành module
📗 Ngôn ngữ chung xuất hiệnBắt đầu hình thành ubiquitous language
🚨 Lỗ hổng tri thức hiện raĐộng lực để tìm hiểu sâu hơn

🕵️ Khi nào nên dùng EventStorming?

Mục đíchCó nên dùng EventStorming?
Khám phá nghiệp vụ mới✅ Có
Xây dựng ngôn ngữ chung✅ Có
Tìm hiểu hệ thống legacy✅ Có
Onboard nhân sự mới✅ Có
Process quá đơn giản, không nhánh❌ Không cần thiết

🖥️ EventStorming từ xa có ổn không?

  • ⚠️ Không hiệu quả bằng khi gặp mặt trực tiếp
  • Dùng miro.com để mô phỏng không gian dán sticky
  • Tốt nhất giới hạn ~5 người/lần nếu online → có thể tách nhiều nhóm rồi ghép lại

Để lại một bình luận