首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分类器的集料设计

分类器的集料设计
EN

Stack Overflow用户
提问于 2021-11-20 10:09:23
回答 2查看 412关注 0票数 0

我试图用DDD设计一个复式分类帐,但在定义聚合根时遇到了一些麻烦。有三个领域模型:

  1. LedgerLine:具有数据的单独行项,如在其上创建的数量、时间戳、分类账中的etc.
  2. LedgerEntry:条目。每个分录包含多个balance.
  3. LedgerAccount:,其中借方和信用额度必须在分类帐中的LedgerLine帐户。有两类账户:(1)内部账户(如现金) (2)外部账户(例如,联系银行账户)。外部帐户可以是added/removed.

在网上阅读了一些文章后(例如,这篇文章:https://lorenzo-dee.blogspot.com/2013/06/domain-driven-design-accounting-domain.html?m=0)。看起来LedgerEntry应该是一个聚合根,包含对LedgerLines的引用。LedgerAccount应该是另一个聚合根。LedgerLines将保存相应的LedgerAccount ID。

虽然这很有意义,但当分类账行被添加时,我很难弄清楚如何更新分类账帐户的余额。上面的文章建议动态计算余额,这意味着在添加LedgerEntrys时不需要更新。但是,我使用Amazon作为分类账,他们的解决方案工程师特别建议在LedgerAccount上计算和存储余额,因为QLDB不是针对这种“扫描大量文档”操作而优化的。

现在出现了这样的两难局面:

如果我在添加overdrafts.

  • If s时同步更新balance字段,那么我将在一个操作中更新两个聚合,这违反了一致性边界。如果在收到"Add LedgerEntry“操作发出的事件后异步更新balance字段,则如果我在帐户上添加了另一个将余额花费在帐户上的LedgerEntry,则可能会在帐户上读取陈旧的余额,这可能导致将LedgerAccount模型包含在LedgerEntry的同一个聚合中,然后我就失去了添加/删除单个LedgerAccount的能力,因为我不能直接查询它们。

  • 如果我去掉balance字段并动态计算它,那么可能会出现性能问题,给出(1) QLDB限制(2)分类账行数无界的事实。

那么正确的设计是什么呢?任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-20 11:34:49

您可以使用Saga模式来确保整个过程完成或失败。

这是底漆. https://medium.com/@lfgcampos/saga-pattern-8394e29bbb85

我想在分类账账户中添加“保留基金”拥有的收款。Balance'.

  • 'Available账户将有“实际”余额,“可用”

  • 余额为“实际”余额减去“储备基金”

的价值

使用Saga来管理流程:

  1. 试图在总账户上储备资金。分类账帐户将检查其可用余额(实际减去储备资金总数),如果足够,则在其收款中增加另一笔储备资金。如果预订成功,帐户聚合将返回一个预订唯一id。如果预订失败,则无法发布该条目。

  1. 试图完成复式簿记。如果失败,请向帐户聚合发送一个“Release订票”命令,引用保留唯一的id,这将删除预订,然后返回到我们开始的位置。

  1. 在复式簿记完成后,发送命令到Account,以便“完成”预订,并保留唯一的id。然后,帐户聚合将删除保留并调整其实际余额。

这样,您就可以管理分布式事务,而不会出现帐户透支的情况。

票数 0
EN

Stack Overflow用户

发布于 2021-11-20 21:50:35

聚合根应该用作事务边界。多腿事务跨越多个帐户,因此帐户不能。

因此,分类帐本身就是一个总根。会计事务应与数据库事务相对应。

实际上,“账簿本身”并不意味着单身。它可以是组织分支*时间段分类账。而且通常是在非计算机事件源系统中。

更新。

分类账账户余额仅仅是对分类帐的一个视图。作为一种观点,它具有某种已知事件的状态。在作出是否接受操作的决定时,应确保分类帐的实际状态是截至余额处理的最新状态。如果不是,则应先处理较新的事件,然后再尝试帐户操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70044958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档