2012-01-06 27 views
8

Trong tất cả các ví dụ về CQRS tôi đã thấy, các sự kiện miền kích hoạt cập nhật cho mô hình đã đọc nhưng không có gì khác. Nhưng điều gì xảy ra khi bạn muốn một sự kiện miền gây ra các thay đổi khác trong miền?Sự kiện miền kích hoạt các thay đổi tên miền khác trong CQRS

Ví dụ, giả sử bạn có các yêu cầu sau:

  • khi nút "đóng tài khoản" được nhấp, đóng tài khoản
  • khi tài khoản được payed tắt, đóng tài khoản
  • khi tài khoản bị đóng, đánh dấu chủ sở hữu tài khoản là "đặc biệt"

Cách tốt nhất để xử lý vấn đề này là gì?

  1. Hãy Account.Close() tạo ra một sự kiện AccountClosed cũng đánh dấu chủ sở hữu là "đặc biệt"
  2. Hãy một handler AccountClosed đánh dấu chủ sở hữu là "đặc biệt"
  3. Hãy một handler AccountClosed rằng nộp một lệnh MarkOwnerAsSpecial
  4. Tận dụng bộ xử lý lệnh đó đóng tài khoản cũng đánh dấu chủ tài khoản là "đặc biệt"

Trả lời

9

có một c cụ thể oncept được gọi là Sagas cho mục đích chính xác này. Bắt đầu với bài viết này của Rinat Abdullin, sau đó đi từ đó.

http://abdullin.squarespace.com/journal/2010/9/26/theory-of-cqrs-command-handlers-sagas-ars-and-event-subscrip.html

Tùy chọn 3 của bạn đến gần khái niệm này. Một saga về cơ bản là một trình xử lý sự kiện phát hành các lệnh mới. Bạn sẽ không muốn có một sự kiện thao tác tập hợp bên ngoài một sự kiện mà nó bắt nguồn từ việc xử lý sự kiện và gửi các lệnh mới theo các quy tắc nghiệp vụ của bạn. Đây là những gì saga sẽ làm.

+0

Tôi đã đọc điều đó trước đây nhưng nó quá trừu tượng đến mức tôi không hiểu cách sagas cơ bản biến các sự kiện thành các lệnh. Tôi tìm thấy một phần 2 bài viết giải thích rằng và có mẫu mã. http://blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-i-of-ii/ –

+0

@TrystanSpangler Liên kết đó đưa ra 404 và dường như đã được chuyển đến http://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-i-of-ii/ – Melle

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