CQRS - Command Query Responsibility Segregation

CQRS là kiến trúc tách hẳn phần ghi (Command) và phần đọc (Query) thành hai đường đi riêng biệt. Đây là hệ quả tự nhiên khi ta đẩy việc tách Read Model/View Model khỏi write model đi tới cùng.

🔀 Hai phía

Command dùng entity/aggregate thiết kế cho nghiệp vụ và đảm bảo invariant. Query dùng mô hình đơn giản, bất biến, tối ưu cho truy vấn. Không dùng đối tượng mutable với logic phức tạp cho mục đích chỉ đọc.

🎯 Lợi ích

  • Tối ưu độc lập: phía đọc và phía ghi có thể dùng mô hình dữ liệu khác nhau, thậm chí database khác nhau (write dùng SQL chuẩn hóa, read dùng bảng/view tổng hợp hoặc index tìm kiếm).
  • Dễ mở rộng & bảo trì: hai concern tách bạch, thay đổi bên này ít ảnh hưởng bên kia.
  • Đồng bộ giữa hai mô hình có thể thực hiện qua Domain Event (khi write đổi → phát event → cập nhật read model).

⚖️ Đánh đổi

CQRS phức tạp hơn vì phải duy trì tính nhất quán giữa hai mô hình. Sách khuyến nghị: với ứng dụng thường, bắt đầu bằng cách nhẹ nhàng (dùng chung DB, chỉ tách lớp repository đọc riêng), chỉ đi tới CQRS đầy đủ khi thực sự cần.

Liên quan