实体是否调用自己的行为或者是演员吗?

时间:2017-04-23 06:07:05

标签: domain-driven-design

我试图应用一些DDD概念,我只是想知道什么更有意义:一个实体调用自己的方法,或者让用户(演员)这样做?

例如,我们假设我们有一个约会实体。 用户只有在他/她是该约会的所有者时才能取消约会(因此我们需要在允许该操作之前检查用户是否具有适当的权限)。我们可以通过以下两种方式之一做到这一点:

column B

有界上下文是" Appointments",但似乎对于用户调用实体上的行为比反过来更有意义。 哪种方式更好,为什么?

1 个答案:

答案 0 :(得分:1)

首先,您需要确定Aggregate rootAR),UserAppointment是什么。为了确定您应该检查必须保护的业务不变量,您应该看到什么是事务边界。有一篇非常好的文章hereAR是用于访问其所有子/嵌套实体的实体。

因此,根据您的设计,会有AR和子实体(设计中的其他实体)或两个ARs

然后,通过仅指定其他实体的ID而不是孔对象来访问聚合上的该命令方法。

Appointment.Cancel(uId *UserID) 

或者

User.Cancel(aId *AppointmentID)

现在,权限检查通常是一种自然不属于聚合的行为。该验证在调用方法之前完成。聚合设计不应仅受此许可事项的影响。例如,秘书也可以取消预约,而不仅仅是参与者。权限检查在另一个bounded context

根据我对您所在域名的理解,约会应为AR,您的代码应如下所示:

Appointment.Cancel(byWhom *UserID) 

最后一件事,如果你遵循CQS模式,那么该方法不会返回任何内容。