2013-04-29 73 views
2

我最近與同事討論過,他堅持認爲在域驅動設計實體中不應該有一種不會修改其狀態的行爲。根據我迄今的經驗,我從來沒有聽說過這個限制。這是一個有效的DDD規則嗎?實體是否應該只包含修改狀態的行爲?

給予一定的上下文(簡化方案) - 在我們的領域,我們有計算機的實體,您可以在其中啓動進程,我們的集成層,實際上它委託給一個遠程物理計算機,並開始有一個過程。

所以,應該StartProcessComputer實體的行爲?還是應該將其包含在域服務中,因爲它不直接影響Computer實體的狀態? (它會在進程結束後間接修改狀態,並將數據同步回到我們的系統)。

對我實體是它的一個自然的地方,因爲它遵循的通用語言,但我想知道,如果有人有反對理由(或其他原因)。

回答

2

IMO實體的行爲並不需要修改狀態,但起碼應該發射事件。在這種情況下,該事件將類似ProcessStarted。 CQRS /事件採購視圖基本上作爲命令處理程序聚合 - 它們處理命令併發出事件。當需要行爲或爲了查詢目的而非規範化時,狀態是明確的。

+0

我只想強調一點,雖然消息驅動的體系結構和CQRS適應這麼好DDD,他們不需要 – MikeSW 2013-04-30 08:42:32

+0

真實,雖然使用域事件並不意味着CQRS/ES。我應該更清楚。 – eulerfx 2013-04-30 14:59:37

相關問題