2010-10-01 33 views
13

CQRS đã đưa tôi vào chế độ suy nghĩ .. Tôi đang cố gắng để bắt đầu một dự án mới với ý tưởng CQRS. Những điều chính mà tôi thích là
1) việc tách truy vấn và lệnh. Truy vấn miền của chúng tôi đã là một vấn đề.
2) Sử dụng bộ nhớ sự kiện để kiểm tra - Tôi sẽ không sử dụng nó để phát lại - ít nhất là bây giờ.CQRS và sự kiện miền

tôi tốt với phía truy vấn và tôi vẫn còn có một số câu hỏi về tên miền Sự kiện

Nếu một kết quả Command trong updation của Nhiều Uẩn Roots (Ex. Trình tự, OrderDetail) tôi sẽ có họ scoped dưới UnitofWork (giao dịch). Bây giờ mỗi miền chịu trách nhiệm xuất bản các sự kiện khi thay đổi diễn ra ở trạng thái của nó.

hãy để chúng tôi nói lệnh thay đổi 3 bản ghi OrderDetail. Mỗi OrderDetail sẽ xuất bản 2 Sự kiện. Cuối cùng chúng ta có 6 sự kiện.

a) Nếu tôi xuất bản các sự kiện ngay khi tôi thực hiện thay đổi đối tượng miền (nhưng không cam kết giao dịch) thì làm cách nào để đảo ngược các sự kiện đã được xuất bản (và có thể đã bị người đăng ký sử dụng)

  • Điều tôi có thể nghĩ là giữ các sự kiện được xuất bản trong danh sách 'dưới cùng một đơn vị phạm vi công việc' và khi ủy ban giao dịch được gọi, lưu trữ và xuất bản nó. Điều này âm thanh một cái gì đó người ta sẽ làm.

b) Nếu những thay đổi trong OrderDetail đòi hỏi rằng một số thay đổi cũng diễn ra trong thứ tự tổng hợp gốc sau đó
i) Tôi có nên căn những thay đổi đó bằng cách xử lý các sự kiện xuất bản bởi OrderDetail tổng hợp? Ví dụ: chúng ta hãy nói rằng hai chi tiết đơn đặt hàng đã được gỡ bỏ. Điều này làm cho trạng thái Đơn đặt hàng từ "ưa thích" thành "Không được ưu tiên". ii) Điều gì xảy ra nếu lỗi Sự kiện và không cập nhật trạng thái đơn đặt hàng - Nếu đơn đặt hàng vẫn được ưa thích thì nó sẽ được chuyển đi sau 2 ngày.

Thêm một câu hỏi
c) Are "Domain sự kiện là nguồn gốc của tất cả thay đổi trạng thái ứng dụng" hoặc là họ "Kết quả của tất cả những thay đổi trạng thái ứng dụng"

Cảm ơn bạn trước,

The Mar

+0

Tôi khuyên bạn nên đăng câu hỏi như thế này lên Google Group trên DDD/CQRS. Có nhiều học viên ở đó hơn. –

Trả lời

10

a) bạn không nên xuất bản sự kiện cho đến khi giao dịch của bạn được cam kết, một sự kiện reprsent một cái gì đó mà đã xảy ra, và do đó lý do tại sao họ là tất cả na med trong pass pass (ví dụ OrderClearedEvent). Ngoài ra, trong trường hợp bạn phải "hoàn nguyên" một sự kiện, bạn nên thực hiện hành động khắc phục, nghĩa là bạn không xóa sự kiện, bạn phải kích hoạt sự kiện mới để sửa chữa các hiệu ứng của sự kiện bạn muốn hoàn nguyên

b) có vẻ như đây là vấn đề về cách bạn mô hình hóa các thực thể và các lệnh của bạn như thế nào. Tôi không thể nghĩ ra một lý do tại sao OrderDetail sẽ là một AggregateRoot, nhưng tôi không biết tên miền của bạn ...

c) Các lệnh sẽ dẫn đến ít nhất một sự kiện được công bố

Hope this helps :) Như Rinat nói , nhóm google là nơi tốt nhất để đặt câu hỏi, cũng có thể xem cqrsinfo.com và mã mẫu từ github.com/MarkNijhof/Fohjin và github.com/gregoryyoung/m-r

+0

Cảm ơn bạn đã trả lời. Tôi đã sử dụng các nhóm google DDD/CQRS và NCQRS như Rinat đã đề cập. Rất nhiều cuộc thảo luận tốt ở đó. – TheMar

+0

Axon là một nguồn thông tin và ví dụ tốt nếu bạn đang ở trong thế giới Java. https://github.com/AxonFramework – Kimble

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