实体是否只包含修改状态的行为?

时间:2013-04-29 23:13:44

标签: domain-driven-design

我最近与一位同事进行了讨论,他坚持认为在域驱动设计中,实体不应该有不会修改其状态的行为。根据我迄今为止的经验,我从未听说过这种限制。它是有效的DDD规则吗?

为了给出一些上下文(简化场景) - 在我们的域中我们有计算机实体,您可以在其上启动进程,我们的集成层实际上将它委托给远程物理计算机并在那里启动进程。

那么,StartProcess应该是Computer实体的行为吗?或者是否应该包含在域服务中,因为它不会直接影响Computer实体的状态? (它会在进程结束后间接修改状态,并将数据同步回我们的系统)。

对我而言,实体是一个自然的地方,因为它遵循无处不在的语言,但我想知道是否有人有充分理由反对(或其他原因)。

1 个答案:

答案 0 :(得分:2)

IMO实体行为不需要修改状态,但至少应该发出一个事件。在这种情况下,事件将类似于ProcessStarted。 CQRS /事件源视图基本上聚合为命令处理程序 - 它们处理命令和发出事件。当行为需要或出于查询目的而非规范化时,状态变为显式。