【问题标题】:CQRS, DDDD in an accounting domain会计域中的 CQRS、DDDD
【发布时间】: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


【解决方案1】:

我觉得这个模型很不错。根据 Martin Fowler 的Accoutning Pattern,您可以使用 Transaction 作为 Entry 的工厂(使用 Account 作为参数)。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 2015-10-18
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多