Lesson 67 — CQRS & Event Sourcing
Ba module tương tác: (1) Event Sourcing replay — fold chuỗi event để dựng state, kèm time-travel slider; (2) CQRS — write model (validate) tách khỏi read model (denormalized), sync qua projection; (3) Snapshot — so sánh chi phí replay từ đầu vs từ snapshot.
1. Event Sourcing — replay & time travel
Tài khoản KHÔNG lưu balance. State = events.reduce(apply). Kéo slider để "tua" tới event thứ k
và xem balance tại đúng thời điểm đó (time travel). Thêm event để mở rộng lịch sử.
2. CQRS — write model vs read model
Bên WRITE nhận command, validate business rule (đơn ≥ 1 món, tổng > 0), lưu normalized. Bên READ là projection denormalized — gom sẵn tổng tiền, số món. Thử gửi command hợp lệ và không hợp lệ.
"hãy đặt đơn"
validate + lưu normalized
denormalize
đọc nhanh, gom sẵn
WRITE Write store (normalized)
| OrderID | Customer | Items (raw) |
|---|
READ Read model (denormalized)
| OrderID | Khách | Tổng | Số món |
|---|
3. Snapshot — chi phí replay
Một aggregate có nhiều event. Đọc state = replay. Snapshot mỗi N event giúp chỉ phải replay phần sau snapshot gần nhất. Chỉnh tổng event và khoảng snapshot để thấy chi phí thay đổi.