我正在使用事件源構建StackOverflow克隆。 MVP的很簡單:事件源:聚合根和性能
- 用戶可以張貼問題
- 用戶可以回答的問題
- 用戶可以給予好評和downvote的答案非封閉式問題
我建模的問題作爲聚合根。一個問題可以有零個或多個答案,答案可以有零個或多個upvotes和downvotes。
雖然這會導致巨大的性能問題。爲了答覆答案,必須加載問題(作爲聚合根),這需要加載所有的答案。在非事件源DDD中,我會使用延遲加載來解決這個問題。但事件採購中的延遲加載並非微不足道(http://docs.geteventstore.com/introduction/event-sourcing-basics/)
將問題建模爲聚合根是否正確?
Vernon似乎建議這些應該是多個聚合,以避免併發問題:http://ptgmedia.pearsoncmg.com/images/9780321834577/samplepages/0321834577.pdf – MattTannahill
不,你沒有建模一個聚合根。你'建模'一個數據結構/視圖模型,並稱之爲'聚合根'。正確的DDD沒有這個問題,這是最常見的DDD錯誤之一。您的模型完全錯誤,您需要再次嘗試確定聚合及其一致性規則。順便說一句,通常CQRS是性能的答案,但在這種情況下,模型仍然是錯誤的,無論cqrs。 – MikeSW
感謝您的反饋。我發現了Vaughn Vernon這個非常有用的例子:https://github.com/VaughnVernon/IDDD_Samples/tree/05d95572f2ad6b85357b216d7d617b27359a360d/iddd_collaboration/src/main – MattTannahill