Domain driven design 实体应该只包含修改状态的行为吗?

Domain driven design 实体应该只包含修改状态的行为吗?,domain-driven-design,Domain Driven Design,我最近与一位同事进行了一次讨论,他坚持认为域驱动的设计实体不应该有不改变其状态的行为。根据我迄今为止的经验,我从未听说过这种限制。这是有效的DDD规则吗 为了提供一些上下文(简化的场景)-在我们的领域中,我们有一个计算机实体,您可以在这个实体上启动进程,我们的集成层实际上会将它委托给一个远程物理计算机并在那里启动一个进程 那么,StartProcess应该是一个计算机实体的行为吗?或者应该将其包含在域服务中,因为它不会直接影响计算机实体的状态?(一旦进程结束,数据被同步回系统,它就会间接地修改状

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

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

那么,
StartProcess
应该是一个
计算机
实体的行为吗?或者应该将其包含在域服务中,因为它不会直接影响
计算机
实体的状态?(一旦进程结束,数据被同步回系统,它就会间接地修改状态)


对我来说,实体是一个自然的地方,因为它遵循普遍存在的语言,但我想知道是否有人有充分的理由反对(或有其他理由反对)。

在我看来,实体行为不需要修改状态,但至少应该发出事件。在本例中,事件类似于
ProcessStarted
。CQR/事件源视图本质上聚合为命令处理程序-它们处理命令并发出事件。当行为需要或查询需要取消规范化时,状态是显式的。

我只想指出,虽然消息驱动体系结构和CQR非常适合DDD,但它们并不需要True,尽管使用域事件并不意味着CQR/ES。我应该说得更清楚些。