2010-06-01 21 views
5

Trong cố gắng để có được đầu của tôi xung quanh CQRS (và DDD nói chung) Tôi đã đi qua các tình huống khi hai sự kiện xảy ra trên tổng hợp khác nhau nhưng thứ tự của họ có ý nghĩa tên miền. Nếu vậy thì chúng có thể xảy ra quá gần nhau đến nỗi dấu thời gian (được sử dụng bởi các triển khai mẫu mà tôi đã thấy) không thể phân biệt chúng, có nghĩa là cửa hàng sự kiện không chứa đại diện 'hoàn chỉnh' của miền vì có sự mơ hồ về thứ tự trong đó sự kiện đã xảy ra.Trong CQRS (sự kiện có nguồn gốc), bạn có cần một bộ đếm chuỗi toàn cầu trong cửa hàng sự kiện không?

Ví dụ: tên miền có thể kích hoạt CustomerCreatedEvent áp dụng cho tổng hợp Customer và sau đó là sự kiện CustomerAssignedToAgent trên tổng hợp Agent. Sự kiện CustomerAssignedToAgent không có ý nghĩa nếu nó xảy ra trước CustomerCreatedEvent, nhưng thông thường cả hai sự kiện này có thể được kích hoạt do một hoạt động khiến cho các dấu thời gian có hiệu quả giống nhau.

Vì vậy, tôi chỉ đang mô hình hóa những điều tồi tệ? Nên có bao giờ có một tình huống mà chuỗi các sự kiện trên tổng hợp khác nhau là quan trọng? Hoặc bạn nên giữ một số thứ tự toàn cầu trên cửa hàng sự kiện của bạn, để bạn có thể xác định trình tự chính xác trong đó các sự kiện đã xảy ra?

Trả lời

5

Nói chung, ý tưởng tồi là thực thi trật tự toàn cầu. Các tổng hợp có nghĩa là tạo thành các ranh giới ngữ nghĩa ACID.

Điều này có nghĩa là hai tập hợp không được cập nhật trong một giao dịch và không có phương tiện nào khác để thực thi lệnh toàn cầu.

Trong trường hợp của bạn, điều đó có thể có nghĩa là cùng với việc tạo CustomerCreatedEvent Khách hàng nên gửi thông báo đến Tổng hợp đại lý yêu cầu họ tự gán. Nói chung thông tin liên lạc tổng hợp nên được thực hiện thông qua tin nhắn.

+0

Cảm ơn Szymon, tôi nghĩ đó là trường hợp có khả năng nhất! –

+0

Tôi đã đọc rất nhiều lần, nhưng ... khi bạn sử dụng EventStore làm hàng đợi để tiêu thụ các sự kiện từ các bối cảnh bị chặn khác, hoặc thậm chí cho cùng BC mà chúng được tạo ra, làm sao bạn có thể chắc chắn theo thứ tự? bạn không cần chúng theo thứ tự rất nghiêm ngặt, nhưng ít nhất bạn cũng cần có khả năng tiêu thụ chúng từ một bù đắp nhất định. – Papipo

5

Tôi cũng thấy this post by Greg Young trong danh sách yahoo domaindrivendesign:

thứ tự được chỉ đảm bảo mỗi một handler trong một ranh giới gốc tổng hợp.

Không đảm bảo trật tự giữa các trình xử lý hoặc giữa các tập hợp.

Cố gắng cung cấp những thứ đó dẫn đến mặt tối.

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