CQRS (Command Query Responsibility Segregation) = tách mô hình ghi (command) khỏi mô hình đọc (query) thay vì dùng chung một model cho cả hai.
- Command side: xử lý thay đổi trạng thái, tối ưu cho tính đúng đắn/nghiệp vụ.
- Query side: đọc từ model/kho được tối ưu riêng cho đọc (denormalized, precomputed), có thể là DB khác.
- Hai bên thường đồng bộ qua event → eventual consistency giữa ghi và đọc.
Khi nào dùng:
- Tỉ lệ đọc/ghi rất lệch và nhu cầu đọc phức tạp/đa dạng cần scale riêng.
- Domain phức tạp, hay đi cùng event sourcing.
Cảnh báo (theo Fowler): CQRS thêm độ phức tạp đáng kể; đừng dùng cho toàn hệ — chỉ áp cho bounded context thực sự cần. Với CRUD đơn giản thì lợi bất cập hại.