DDD 实体是否隐藏在我的 DDD 值对象中?

Is a DDD entity hidden in my DDD Value Object?

在我的家庭项目中,我遇到了确定域对象类型的问题。

领域:巴士时刻表

限界上下文:路由(public 交通基础设施,ctx1),时间表(调度,ctx2)

对象:

例如:公交线路 25A 有两条路线 [{st1, st3, st20}, {st20, st15, st3, st1}] 和 2 个时间表(时间表 1 - 路线 1,sch2- r2)这 2 条路线。

毫无疑问,我将 LineCity 确定为 DDD 实体,聚合根。此外,我决定将路由放入线中,因为它们在线之外没有任何意义,并且它们的生命周期 == 线的生命周期。还是好看。

下一步是定义计划域对象。我想将它与 public 传输基础设施分开,所以我将它作为一个实体放在另一个上下文中。问题是现在我需要将它附加到没有标识符的路由。

我的想法:

也许我做错了什么?

我认为您需要更多地考虑您希望如何使用您的域。在您的示例中,您已经说过您有一条线路,一条线路有路线,一条线路有时间表。

我还希望你想问路线问题(比如这条路线上的 st77)或操作(s99 站关闭 2 周)。这意味着路线是一个实体。可能你不再是价值对象。

route 的聚合根将是一条公交线路,就像你说的你无法想象一条线路之外的路线。这正是聚合根的含义。

此外,路由的标识符不必是有意义的名称,它可以有一些随机的 guid 作为标识符。我的电脑作为序列号。没有人真正谈论过该序列号(我谈论的是 x 型戴尔),但当我订购它时,这是一个非常好的识别和跟踪特定计算机的数字。

更新 DDD 也是关于 describing/modeling 你的问题。这是关于发现问题域的旅程。不要太拘泥于它的样子,而是在与你试图解决的问题(与你的领域专家)交谈时发现它的样子。也许您会发现路线和线路甚至与时刻表和站点无关。 (如果你试图解决的问题是找到下一班公共汽车何时到达,那么如果你是公共汽车公司并且需要实际驾驶公共汽车的时间表,线路似乎更重要)