【发布时间】:2013-08-04 00:16:39
【问题描述】:
我想知道如何正确建模我的聚合。域是会计,我有三个实体:Account、AccountingEntry(这应该是一个值对象吗?)和AccountingTransaction。该帐户可以说是客户的银行帐户。 AccountingEntry 是帐户中的一个条目,AccountingTransaction 将构成单个交易的多个条目联系起来(例如,从帐户 A 转移到帐户 B)。在一起。
我的想法是将 Account 和 AccountingTransaction 建模为聚合,AccountingEntry 建模为 AccountingTransaction 中的集合。这是为了允许会计交易汇总执行不变量,即交易中的所有条目必须总和为零。这些条目将包含对其关联帐户 ID 的引用(如果我们想撤销交易,这将很有用)。帐户不会保存对条目的任何引用,但会保留余额。
我会使用 saga 来管理交易账户的贷记和借记流程。
我想知道我的建模是否正确。
我还想知道如何确保无法创建包含对无效(不存在)帐户的引用 (ID) 的会计条目。该帐户是否应该用作创建条目的工厂,并传入它自己的 ID?
【问题讨论】:
-
我认为您还必须在理想主义和务实之间做出选择。据我了解,DDD 纯粹主义者要求实体始终有效。你打算如何用你的模型做到这一点?如何在事务中添加条目并使其总和为 0 而不会在添加条目行之间无效? (即贷记 1000,然后添加借记 500,然后添加借记 500 以平衡交易)实体将无效,直到添加您的最终条目?务实地说,你可以改变你正在争取的规则,只要求实体在保存之前是有效的。
-
至于如何防止对无效(不存在)帐户的引用,如果您使用关系数据库作为您的存储,数据库将免费为您强制执行完整性。
标签: domain-driven-design cqrs dddd