我有几个聚合:存款,提款等。现在有一个名为Ledger的VO,它也有其他相关的VO。 Ledger标志着存款和提款的交易,这种交易都发生过。在这种情况下,它似乎类似于创建一个单独的聚合(创建一个文件夹并将Ledger和相关类型放入其中)。但是DDD不允许我这样做,因为聚合根只能是实体。
可能的解决方案是什么?如何在DDD的边界内对Ledger和相关VO进行分类和放置?
更新
分类帐就像一个记录,是每个操作执行的事务。例如,当存款已经进行,交易已经发生等等。因此它没有状态,只会保存一次而不会再次修改。它一直用于保存记录。
存款和取款都有州和终身,其状态将从待定到确认,或从待定到已取消。所以他们不能成为服务。
如果需要更多信息,请与我们联系。
提前致谢。
答案 0 :(得分:1)
从您的更新中,听起来好像您可能会遇到轻微的术语问题和缺失的实体。
您可能需要将Ledger
值对象重命名为LedgerRecord
或LedgerEntry
。
您遗失的实体可能是Ledger
(分类帐就像一本书,一个记录或条目的容器)。这将有一个LedgerRecords
的集合。
因此,您可以致电Ledger.MakeEntry(text)
或致电LedgerService.GetLedgerSectionByDateRange(from, to)
,这将从该日期范围内返回填充Ledger
的{{1}}等。
答案 1 :(得分:0)
首先,想一想作为Ledger一部分的其他VO。在这些VO之前,您是否还有任何隐藏的身份?在那种情况下,那将是(根)实体,你将拥有你的聚合。
如果情况并非如此,您可以考虑分类帐是否是作为根实体为Operation的Aggregate的一部分的VO,其中Operation是具有唯一标识的实体,并且Withdraw和Deposit将是专业化。