2012-04-18 41 views
5

Tôi đang làm việc trên hệ thống cửa hàng sự kiện CQRS/sự kiện. Hiện tại, mẫu mà tôi sử dụng là cho các lệnh để đồng bộ. Đó là, giao diện người dùng không hiển thị một hoạt động như đã hoàn thành cho đến khi lệnh hoàn tất và thành công/thất bại được hiển thị cho người dùng. Trong quá trình thực hiện các lệnh, tất cả các sự kiện được tạo (ví dụ: hành động X xảy ra trên tổng hợp Y gốc) được lưu trữ trong bộ nhớ bền.Ưu điểm của việc lưu trữ lệnh trong hệ thống CQRS/ES là gì?

Tất cả các mô tả về CQRS mà tôi đã đọc triển khai lệnh lưu trữ. Tôi tự hỏi nếu điều này là cần thiết trong tình hình của tôi.

Một lưu ý khác - có rất nhiều hành động loại lệnh chạy dài, vì vậy tôi đã chia nhỏ hoạt động thành lệnh tạo sự kiện và các sự kiện lần lượt đưa ra nhiều lệnh hơn. Các lệnh là idempotent, dựa trên trạng thái gốc tổng hợp. Tôi không biết làm thế nào điều này sẽ ảnh hưởng đến câu trả lời, nhưng nó là giá trị chỉ ra.

Cảm ơn, Erick

+0

Có thể cung cấp một số ví dụ về triển khai lưu trữ lệnh? Hầu hết các ví dụ tôi đã thấy chỉ lưu trữ các sự kiện được tạo ra như là kết quả của các lệnh. –

+0

Tôi không có bất kỳ khung công tác nào, nhưng CQRS không có sự kiện tìm kiếm các lệnh bản ghi để phát lại, ít nhất là từ sự hiểu biết của tôi. –

+0

Tôi hơi lo lắng về vấn đề bảo mật. Bạn định làm gì với các lệnh như ChangeUserPassword có chứa mật khẩu văn bản rõ ràng? – Kimble

Trả lời

6
  1. Regression thử nghiệm Sau mỗi dev lặp bạn có thể lấy log lệnh từ môi trường sản xuất, tái thực hiện nó và so sánh dòng sự kiện được sản xuất với một sản xuất. Nếu chúng khác nhau - bạn có hồi quy trong logic của bạn.

  2. Hiển thị và phân tích luồng thư.

4

Các ví dụ về Cqrs mà tôi đã nhìn thấy mà không cần sự kiện tìm nguồn cung ứng là cơ sở dữ liệu quan hệ bình thường mà lưu trữ các trạng thái của hệ thống chứ không phải là sự kiện mà hiển thị như thế nào tình trạng của dữ liệu đã về. "Lệnh tìm nguồn" là một khái niệm mới đối với tôi và dường như không đúng vì các trình xử lý lệnh có thể thay đổi theo thời gian. Bất kỳ thay đổi nào đối với logic của trình xử lý lệnh có thể dẫn đến các lệnh không thành công khi được phát lại. Sự kiện phát lại không có vấn đề này vì thuộc tính đối tượng của bạn được đặt trực tiếp.

+0

Điều này có ý nghĩa - cảm ơn! –

Các vấn đề liên quan