Dijkstra June 2018 | Page 11

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