DDD 实体是否隐藏在我的 DDD 值对象中?
Is a DDD entity hidden in my DDD Value Object?
在我的家庭项目中,我遇到了确定域对象类型的问题。
领域:巴士时刻表
限界上下文:路由(public 交通基础设施,ctx1),时间表(调度,ctx2)
对象:
Station - 描述一个公交车站
Route(ctx1) - 一组站点(Route waypoints)
Line (ctx1) - 描述了一条公交线路。包含列表。
Schedule(ctx2) - 从路线 waypoints.
出发的命名集合
例如:公交线路 25A 有两条路线 [{st1, st3, st20}, {st20, st15, st3, st1}] 和 2 个时间表(时间表 1 - 路线 1,sch2- r2)这 2 条路线。
毫无疑问,我将 Line 和 City 确定为 DDD 实体,聚合根。此外,我决定将路由放入线中,因为它们在线之外没有任何意义,并且它们的生命周期 == 线的生命周期。还是好看。
下一步是定义计划域对象。我想将它与 public 传输基础设施分开,所以我将它作为一个实体放在另一个上下文中。问题是现在我需要将它附加到没有标识符的路由。
我的想法:
将时间表放入路线。为什么它不是一个选项:线条变粗;创建 ctx1 和 ctx2
的 ubercontext
将路由设为实体。为什么它不是一个选项(我认为......):虽然不难想象带有某些标识符(例如名称)的路线,但很难想象公交线路之外的公交路线。
也许我做错了什么?
我认为您需要更多地考虑您希望如何使用您的域。在您的示例中,您已经说过您有一条线路,一条线路有路线,一条线路有时间表。
我还希望你想问路线问题(比如这条路线上的 st77)或操作(s99 站关闭 2 周)。这意味着路线是一个实体。可能你不再是价值对象。
route 的聚合根将是一条公交线路,就像你说的你无法想象一条线路之外的路线。这正是聚合根的含义。
此外,路由的标识符不必是有意义的名称,它可以有一些随机的 guid 作为标识符。我的电脑作为序列号。没有人真正谈论过该序列号(我谈论的是 x 型戴尔),但当我订购它时,这是一个非常好的识别和跟踪特定计算机的数字。
更新 DDD 也是关于 describing/modeling 你的问题。这是关于发现问题域的旅程。不要太拘泥于它的样子,而是在与你试图解决的问题(与你的领域专家)交谈时发现它的样子。也许您会发现路线和线路甚至与时刻表和站点无关。 (如果你试图解决的问题是找到下一班公共汽车何时到达,那么如果你是公共汽车公司并且需要实际驾驶公共汽车的时间表,线路似乎更重要)
在我的家庭项目中,我遇到了确定域对象类型的问题。
领域:巴士时刻表
限界上下文:路由(public 交通基础设施,ctx1),时间表(调度,ctx2)
对象:
Station - 描述一个公交车站
Route(ctx1) - 一组站点(Route waypoints)
Line (ctx1) - 描述了一条公交线路。包含列表。
Schedule(ctx2) - 从路线 waypoints.
出发的命名集合
例如:公交线路 25A 有两条路线 [{st1, st3, st20}, {st20, st15, st3, st1}] 和 2 个时间表(时间表 1 - 路线 1,sch2- r2)这 2 条路线。
毫无疑问,我将 Line 和 City 确定为 DDD 实体,聚合根。此外,我决定将路由放入线中,因为它们在线之外没有任何意义,并且它们的生命周期 == 线的生命周期。还是好看。
下一步是定义计划域对象。我想将它与 public 传输基础设施分开,所以我将它作为一个实体放在另一个上下文中。问题是现在我需要将它附加到没有标识符的路由。
我的想法:
将时间表放入路线。为什么它不是一个选项:线条变粗;创建 ctx1 和 ctx2
的 ubercontext
将路由设为实体。为什么它不是一个选项(我认为......):虽然不难想象带有某些标识符(例如名称)的路线,但很难想象公交线路之外的公交路线。
也许我做错了什么?
我认为您需要更多地考虑您希望如何使用您的域。在您的示例中,您已经说过您有一条线路,一条线路有路线,一条线路有时间表。
我还希望你想问路线问题(比如这条路线上的 st77)或操作(s99 站关闭 2 周)。这意味着路线是一个实体。可能你不再是价值对象。
route 的聚合根将是一条公交线路,就像你说的你无法想象一条线路之外的路线。这正是聚合根的含义。
此外,路由的标识符不必是有意义的名称,它可以有一些随机的 guid 作为标识符。我的电脑作为序列号。没有人真正谈论过该序列号(我谈论的是 x 型戴尔),但当我订购它时,这是一个非常好的识别和跟踪特定计算机的数字。
更新 DDD 也是关于 describing/modeling 你的问题。这是关于发现问题域的旅程。不要太拘泥于它的样子,而是在与你试图解决的问题(与你的领域专家)交谈时发现它的样子。也许您会发现路线和线路甚至与时刻表和站点无关。 (如果你试图解决的问题是找到下一班公共汽车何时到达,那么如果你是公共汽车公司并且需要实际驾驶公共汽车的时间表,线路似乎更重要)