2010-10-14 23 views
34

Làm cách nào để mô hình hóa các mối quan hệ nhiều-nhiều với các CQRS/DDD cổ điển?Các giải pháp thay thế cho nhiều mối quan hệ với CQRS

Tôi biết rằng cả triển khai và giải pháp DDD và CQRS đều có xu hướng cụ thể theo từng miền, do đó có thể khó có được câu trả lời chung cho câu hỏi này.

Tuy nhiên, giả sử chúng ta có mối quan hệ quen thuộc giữa SáchTác giả. Đây là một mối quan hệ nhiều-nhiều-cổ điển.

Đối với tôi, nó có vẻ tự nhiên nhất mà SáchAuthor hai khác nhau Entities rằng mỗi thuộc về riêng mình tổng hợp gốc. Do đó, mô hình hóa rõ ràng mối quan hệ nhiều-nhiều giữa chúng không phải là cách để đi.

Làm cách nào để mô hình hóa AddBookCommand? Chúng tôi muốn có thể thêm sách vào thư viện của chúng tôi và bằng cách nào đó nêu rõ rằng Tác giả đã viết Sách này. Làm thế nào để chúng ta mô hình hóa (và tồn tại) một mối quan hệ như vậy?

Cả Sách cũng không Author vẻ như ứng cử viên tốt cho Value Objects ...

Trả lời

35

Giả sử rằng cả hai đều là uẩn, sao chép bất kỳ dữ liệu tác giả bạn cần vào tổng Book khi thêm cuốn sách mới để rằng mọi lệnh tiếp theo đều có đủ dữ liệu tác giả để làm việc. Bây giờ nếu Tổng hợp tác giả cần thông tin về những cuốn sách được viết bởi tác giả, thì nó có thể "đăng ký" với sự kiện NewBookAdded (về mặt kỹ thuật bạn có thể gửi lệnh RegisterAsAuthorOfBook tới tổng hợp Tác giả như là kết quả của sự kiện NewBookAdded). Tôi cho là người ta có thể mô hình hóa nó theo cách khác, nhưng tôi không thân thiết với miền Tác giả sách.

Điểm mấu chốt là bạn không thực sự lưu trữ nhiều người vì chúng không mở rộng quy mô. Bạn phải bắt đầu nghĩ về chúng (tổng hợp) như gửi tin nhắn cho nhau. Câu hỏi lớn hơn là những gì cần phải nhất quán và tại thời điểm nào nó cần phải nhất quán. Chúng ta có quan tâm rằng Tác giả không phản ánh ngay lập tức một cuốn sách mới đã được thêm vào, trong đó cô/anh ta là tác giả? Có bất kỳ bất biến nào mà Tác giả muốn thực thi liên quan đến những cuốn sách mà anh/cô ấy đã viết (và ngược lại) không?

Một điều khác là dừng định hướng dữ liệu và định hướng hành vi hơn. Hành vi của Sách và Tác giả là gì? Điều này sẽ cho biết dữ liệu nào được yêu cầu tại thời điểm nào và nó sẽ được mô hình hóa như thế nào.

http://pastie.org/1220582 cho lần đâm đầu tiên tại Tổng hợp sách.

+2

Cảm ơn, đó thực sự là một câu trả lời tuyệt vời! Tôi đã đọc qua nhiều tài liệu giới thiệu CQRS, nhưng tôi mới chỉ mới bắt đầu và vẫn cần phải suy nghĩ :) –

+7

Chỉ cần thêm vào câu trả lời tuyệt vời của Yves, nếu bạn nhìn vào hành vi thì bạn có thể thấy rằng hoặc cả hai (hoặc không) của cuốn sách và tác giả tổng hợp thực sự là các đối tượng giá trị. Một khi tôi bắt đầu suy nghĩ như thế này tôi thấy rằng rất nhiều đối tượng mà trước đây tôi đã nghĩ đến như là các thực thể được mô hình hóa tốt hơn như các đối tượng giá trị và do đó đơn giản hơn nhiều. Tất cả phụ thuộc vào ngữ cảnh của khóa học ... – FinnNk

+0

Bạn có thể gia hạn liên kết nếu có? Tôi đoán đó là một ví dụ về mô tả của bạn. – ibubi

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