2013-04-29 82 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