2010-06-23 34 views
22

Làm cách nào để tách biệt aggregate roots (AR) giao tiếp với nhau trong môi trường được xây dựng trên nguyên tắc DDD bằng cách sử dụng tổng hợp dựa trên sự kiện?Liên lạc tổng hợp trong CQRS + DDD + Sự kiện Sourcing

Ví dụ: tôi có Facility gốc tổng hợp (AR) có phương thức nhà máy chịu trách nhiệm tạo Booking AR. Các Booking là một sự kết hợp thời gian nhạy cảm của một Person AR và một Facility AR. Chỉ có thể đặt Person trong một đơn Facility.

Trong DDD, tôi có thể đã tham chiếu đến số Booking trong PersonPerson trong Facility. Tuy nhiên, khi tạo các sự kiện để sử dụng trong sự kiện tìm nguồn cung ứng, tôi nghĩ rằng cố gắng để xử lý sự kiện deserialization từ back-end sẽ trở thành cấm. Vì vậy, tôi đã thực hiện để chỉ giữ các tham chiếu đến giá trị của đối tượng dựa trên id duy nhất. Tuy nhiên, điều này sẽ dẫn đến một vấn đề mới, khi một phương thức trên AR cần gọi một phương thức khác trên AR khác - làm thế nào để bạn xử lý tình huống đó? Nhấn kho lưu trữ nguồn sự kiện từ AR miền?

Trường hợp sử dụng chung trong trường hợp này là gì? Tôi có tiếp cận điều này không?

Trả lời

37

Ranh giới gốc tổng hợp xác định ranh giới nhất quán. Bên trong tổng hợp, tính nhất quán được đảm bảo. Bên ngoài ... không phải vậy. Vì vậy, bạn không nên có các hoạt động kéo dài nhiều tập hợp và phải nhất quán. Nếu bạn cần một giao dịch kéo dài hai tập hợp, bạn nên xem lại ranh giới tổng hợp của mình.

Đối với những điều xảy ra ngoài tổng hợp, bạn phải có trình xử lý sự kiện sẽ gửi lệnh đến các tập hợp khác. Nếu logic của các hành động giữa các tập hợp phức tạp hơn, bạn có thể xác định một quy trình, một máy trạng thái sẽ lắng nghe các sự kiện và gửi các lệnh tới các tập hợp. Quy trình có thể được sử dụng để xác định các giao dịch chạy dài (có bù trừ thay cho rollback) hoặc đưa ra quyết định kinh doanh dựa trên những gì đang xảy ra trong hệ thống ở quy mô lớn (ngay cả giữa các ngữ cảnh bị chặn).

+2

Câu trả lời hay - nếu bạn tình cờ tìm kiếm thêm chiều sâu về chủ đề này, bạn có thể thấy bài đăng này hữu ích: [Liên kết tổng hợp trong một hệ thống tổ chức sự kiện] (http://danielwhittaker.me/2014/11/22/ 4-bí mật-liên-aggregate-truyền thông-sự kiện-sourced-hệ thống /) – Codescribler

4

Khi sử dụng Nguồn sự kiện và CQRS, cách thông tin liên lạc trang nhã nhất (ít nhất là theo ý kiến ​​của tôi) là nhắn tin. Bạn có thể xem dự án Ncqrs (sẽ dễ dàng hơn nếu bạn là một người .NET), đặc biệt là chi nhánh 'Nhắn tin'. Ý tưởng là, AR thực hiện giao diện IMessageHandler cho mọi loại thông điệp mà họ xử lý và lớp cơ sở AR trưng ra phương thức Gửi để gửi tin nhắn đó. Bằng cách sử dụng các máy khách API này có thể gọi hành vi mô hình và chính mô hình có thể giao tiếp (giữa các AR).

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