在我的公司,我們目前使用DDD體系結構,結合事件源和CQRS。在最初的版本中,我們允許每個上下文從任何其他上下文接收事件。然而,這很快就變成了一團糟,因爲很難跟蹤哪些事件在哪裏處理。域驅動設計中的上下文之間的通信
我們目前的方法是隻允許命令發送到其他上下文。這效果更好,但它似乎產生了很多代碼開銷。例如:
context A sends a command to context B,
which changes the state of a domain model,
which publishes an event,
which gets handled by an event handler,
which sends a command back to context A,
which changes the state of a domain model,
which publishes an event,
which gets handled by an event handler,
which sends a command to context C,
etcetera.
許多在不同的上下文的域模型的,和大量其觸發發送到另一個上下文中的命令的事件的,含有大量的類似的數據。特別是在我們的客戶網站上下文中,模型幾乎不包含任何邏輯或狀態,只是用於生成可以非規範化到網站數據庫的事件。它的工作原理,但這似乎還沒有走,因爲發佈事件不應該是任何領域模型的唯一目的。
我們現在的想法之一是讓我們的CMS像域模型一樣工作,並直接處理命令,而不是通過模型發送它們並處理結果事件。這是處理這類案件的正確方法嗎?還有其他更有效的方式來進行上下文之間的溝通嗎?