gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:00:17 25 4
gpt4 key购买 nike

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

领域:公交时刻表

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

对象:

  • Station - 描述一个公交车站

  • Route(ctx1) - 一组站点(Route waypoints)

  • 线路 (ctx1) - 描述一条公交线路。包含列表。

  • Schedule(ctx2) - 从 Route 的航路点出发的命名集合。

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

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

下一步是定义 Schedule 域对象。我想把它从公共(public)交通基础设施中分离出来,所以我把它作为一个实体放在另一个上下文中。问题是现在我需要将它附加到没有标识符的路由。

我的想法:

  • 将时间表放入路线。为什么它不是一个选项:线条变粗;创建一个ctx1和ctx2的ubercontext

  • 使 Route 成为一个实体。为什么它不是一个选项(我认为......):虽然不难想象路线有一些标识符(例如名称),但很难想象公交线路之外的公交路线。

也许我做错了什么?

最佳答案

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

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

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

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

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

关于java - DDD 实体是否隐藏在我的 DDD 值对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38613059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com