【问题标题】:DDD: Aggregate Roots without persistenceDDD:没有持久性的聚合根
【发布时间】:2021-04-12 07:28:00
【问题描述】:

我有一个关于聚合根的持久性的问题。

就我而言,我有一个 Calendar 聚合。在日历中的每一天(无限天)我都可以拥有一个或多个Meetings

在我看来,将 Meeting 实体移动到 Calendar 聚合中是不可行的,因为这将要求我在加载日历时始终获取所有会议。

相反,我想出了一个 CalendarDay 聚合,每天跟踪 Meetings

现在我的问题是:CalendarDay 实体实际上并没有额外的元数据,它只是用来在一天内处理不变量。那么,有必要在数据库中存储这样一个CalendarDay吗?我可以通过为其分配一个由calendarId 和特定date 组成的复合ID 来简单地使其“虚拟”。

但是,我会为其创建一个存储库,该存储库始终为给定的calendarIddate 返回一个CalendarDay。如果当天没有会议,会议将只是一个空列表。

这是您会在 DDD 中做的事情,还是某种数据存储中聚合根的实际持久性是强制性的?

【问题讨论】:

  • 您的用户不需要查看一个日历日的会议吗?如果您的聚合是 CalendarDay,那么如果您当天的不变量适用,例如特定时间只有一次会议,那么您应该将其保存在数据库中,然后如果您的用户需要查看当天的日历,则再次获取一个 CalendarDay

标签: aggregate domain-driven-design persistence data-modeling


【解决方案1】:

AR 当然可以是暂时的,但您会使用哪种方法来防止在特定日期发生并发冲突?如果你有一个存储的 AR 实例,你可以使用一个版本实现透明的乐观锁定,而数据库的行级写锁就可以解决问题。您还可以对 date 设置一个独特的约束来解决创建冲突。

无论您是否使 AR 瞬态,我可能仍然有一个 CalendarDay 存储库,它使用并返回 CalendarDay 实例。为 CalendarDay 包装器 AR 本身保留一个条目然后成为实现细节。

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 1970-01-01
    • 2011-02-07
    • 2018-08-12
    • 2020-03-20
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多