MỘT HỆ THỐNG QLDMSP TỐT PHẢI ĐÁP ỨNG CÁC MỤC TIÊU SAU
2.3. Mô hình CQRS
Mô hình CQRS (Command Query Responsibility Segrega-
tion) là sự mở rộng của mô hình ba lớp trong DDD.
Đặc trưng quan trọng của CQRS là việc tách hai phần
logic đọc và ghi dữ liệu ra thành hai thành phần riêng biệt
độc lập với nhau:
•
Phần ghi dữ liệu: được thực hiện qua việc gửi các
lệnh (command) tới các hàm xử lý (handler) thông
qua các tuyến lệnh (command bus. Bộ xử lý lệnh
(Command handler) đóng vai trò tương tự domain
service sẽ tương tác với các mô hình để thực hiện
các nghiệp vụ thay đổi dữ liệu.
• Phần đọc dữ liệu: được thiết kế riêng không lệ thuộc
vào các mô hình của phần ghi dữ liệu. Do đó có thể
linh hoạt trong việc truy xuất cơ sở dữ liệu cũng như
sử dụng các nguồn dữ liệu (data source) khác nhau
để tối ưu về tốc độ truy xuất.
Mô hình CQRS đã khắc phục các hạn chế đã nêu ở mục
2 bên trên.
CQRS sẽ giúp mang lại các lợi thế lớn:
• Cho phép phát triển và tối ưu phần đọc dữ liệu tách
biệt với phần ghi dữ liệu
• Việc mô hình hoá các nghiệp vụ ghi dữ liệu dưới
các lệnh (command) cho phép che đậy tốt các logic
nghiệp vụ, giúp việc mở rộng hệ thống dễ dàng hơn.
Đồng thời các lệnh đó cũng có thể dễ dàng chuyển
đổi giữa xử lý đồng bộ và bất đồng bộ thông qua lớp
trừu tượng là tuyến lệnh (command bus) mà không
cần phải thay đổi mô hình. Điều này sẽ giúp cung
cấp một mô hình nhất quán, xuyên suốt trong bộ
kiến trúc.
Qua phân tích trên, ta có thể nhận thấy cả ba mô hình
trên đều có ưu nhược điểm riêng:
• Mô hình MVC đơn giản, nhưng có nhiều hạn chế khi
giải quyết nghiệp vụ phức tạp cũng như gây trở khi
cho công đoạn kiểm tra (test) và mở rộng hệ thống
sau này.
• Mô hình ba lớp DDD phù hợp cho việc xử lý nghiệp
vụ phức tạp nhưng có nhiều hạn chế khi tối ưu phần
đọc dữ liệu.
• Mô hình CQRS mở rộng từ mô hình ba lớp, giải quyết
tốt việc chia tách đọc ghi, nhưng cũng đòi hỏi phải
thiết kế phức tạp hơn.
Đối với các hệ thống eCommerce lớn thì mô hình CQRS
là mô hình phù hợp nhất vì nó giúp giải quyết cả hai đòi hỏi
lớn là xử lý nghiệp vụ phức tạp và đáp ứng hiệu năng cao.
Phần tiếp theo sẽ phân tích sâu hơn về mặt hệ thống và
một biến thể mở rộng của CQRS là CQRS - ES (Command
Query Responsibility Segregation - Event Sourcing).
DIJSKTRA
11