没有实体的等效聚合

时间:2014-07-14 10:26:04

标签: domain-driven-design

我有几个聚合:存款,提款等。现在有一个名为Ledger的VO,它也有其他相关的VO。 Ledger标志着存款和提款的交易,这种交易都发生过。在这种情况下,它似乎类似于创建一个单独的聚合(创建一个文件夹并将Ledger和相关类型放入其中)。但是DDD不允许我这样做,因为聚合根只能是实体。

可能的解决方案是什么?如何在DDD的边界内对Ledger和相关VO进行分类和放置?

更新

分类帐就像一个记录,是每个操作执行的事务。例如,当存款已经进行,交易已经发生等等。因此它没有状态,只会保存一次而不会再次修改。它一直用于保存记录。

存款和取款都有州和终身,其状态将从待定到确认,或从待定到已取消。所以他们不能成为服务。

如果需要更多信息,请与我们联系。

提前致谢。

2 个答案:

答案 0 :(得分:1)

从您的更新中,听起来好像您可能会遇到轻微的术语问题和缺失的实体。

您可能需要将Ledger值对象重命名为LedgerRecordLedgerEntry

您遗失的实体可能是Ledger(分类帐就像一本书,一个记录或条目的容器)。这将有一个LedgerRecords的集合。

因此,您可以致电Ledger.MakeEntry(text)或致电LedgerService.GetLedgerSectionByDateRange(from, to),这将从该日期范围内返回填充Ledger的{​​{1}}等。

答案 1 :(得分:0)

首先,想一想作为Ledger一部分的其他VO。在这些VO之前,您是否还有任何隐藏的身份?在那种情况下,那将是(根)实体,你将拥有你的聚合。

如果情况并非如此,您可以考虑分类帐是否是作为根实体为Operation的Aggregate的一部分的VO,其中Operation是具有唯一标识的实体,并且Withdraw和Deposit将是专业化。