Về cơ bản, tôi đang cố gắng che giấu khái niệm về CQRS và các khái niệm liên quan.
Mặc dù CQRS không nhất thiết phải kết hợp Nguồn tin nhắn và sự kiện, nó dường như là một sự kết hợp tốt (có thể thấy với rất nhiều ví dụ / blogpost kết hợp các khái niệm này)
Đưa ra một trường hợp sử dụng cho một thay đổi trạng thái cho một cái gì đó (nói để cập nhật Câu hỏi về SO), bạn có xem xét các luồng sau đây là chính xác (như trong thực tiễn tốt nhất) không?
Hệ thống đưa ra một UpdateQuestionCommand tổng hợp có thể được tách thành một vài lệnh nhỏ hơn: UpdateQuestion được nhắm mục tiêu tại Root Aggregate Root và UpdateUserAction (để đếm điểm, v.v.) nhắm vào Root tổng hợp người dùng. Chúng được gửi không đồng bộ bằng cách sử dụng tin nhắn điểm-điểm.
Các gốc tổng hợp thực hiện công việc của chúng và nếu tất cả đều diễn ra tốt các sự kiện tương ứng là Câu hỏi khởi tạo và UserActionUpdated, có chứa trạng thái được gia công cho Cửa hàng sự kiện .. để được yadayada kiên trì, chỉ cần hoàn thành, không thực sự là điểm chính ở đây.
Những sự kiện này cũng được đưa vào hàng đợi quán rượu / phụ để phát sóng. Bất kỳ người đăng ký nào (trong đó có khả năng một hoặc nhiều Máy chiếu tạo Chế độ xem Đọc) đều được đăng ký miễn phí các sự kiện này.
Câu hỏi chung: Có thực sự tốt nhất không, rằng các Lệnh được truyền đạt Điểm-Điểm (nghĩa là: Người nhận được biết) trong khi các sự kiện được phát (Tức là: người nhận không biết)?
Giả sử như trên, điều gì sẽ là lợi thế / bất lợi của việc cho phép các Lệnh được phát qua pub / sub thay vì điểm-điểm?
Ví dụ: Khi phát các Lệnh trong khi sử dụng Saga có thể là một vấn đề, vì vai trò hòa giải mà Saga cần phát trong trường hợp thất bại của một trong những gốc tổng hợp bị cản trở, bởi vì saga không biết bắt nguồn từ rễ tổng hợp nào để bắt đầu .
Mặt khác, tôi thấy những lợi thế (tính linh hoạt) khi các lệnh phát sóng sẽ được cho phép.