使用事件溯源的复式记账系统

Posted

技术标签:

【中文标题】使用事件溯源的复式记账系统【英文标题】:Double Entry Accounting System Using Event Sourcing 【发布时间】:2021-10-01 00:46:30 【问题描述】:

如何使用事件溯源设计复式记账系统?我读到这是一个适用事件溯源的领域,它对我来说似乎很直观,它存储所有影响分类帐的事件,并根据这些事件在内存中构建分类帐。有关如何构建这样一个系统的任何指示?

【问题讨论】:

嗨,您的主要兴趣是复式记账法、事件溯源还是使用内存方法?只是想确保我理解,所以我(我们?)可以专注于你想要的。另外,您对事件溯源的熟悉程度如何? 我建议研究领域驱动设计(尤其是围绕分解为聚合的想法)。 我的目的是建立一个会计系统,我打算用传统的方式来做一个分类帐表,我很清楚这种方法。我试图寻找传统关系方法的替代方案,并尝试使用内存解决方案,因为分类帐表中的数据将被大量查询以进行分析。当时的想法是拥有一个事件源系统,其中所有将在分类帐中创建条目的事务都可以视为事件,现在我可以在应用程序启动时在内存中重新创建分类帐。我是事件源概念的新手 在事件溯源中,某个实体的事件流应该是最终的事实来源。问题是,这个实体是什么。一个帐户?但是一个交易涉及多个。然后我想到的是一个银行分行的交易清单,不管它叫什么。这与事务的定义相匹配,构成了一个严格的序列。 交易作为一个事件是我所描绘的。我进行了某种形式的提款,对所有受其影响的帐户的更改将被绑定为交易并作为事件被封存。 【参考方案1】:

在事件溯源中,关于一个实体在给定时间点的最终真相来源是其严格有序的事件序列。

事件溯源的关键部分是决定是否保留另一个事件。通常你需要当前状态来做出这样的决定。实体不应在检索当前状态和保持另一个事件之间发生变化。这意味着,你锁定它。

在物理的计算机前事件源系统中寻找灵感。公制书籍、银行系统、医疗记录。在这些情况下,一些实体书是一个可以锁定的令牌:没有两个人可以同时写入这样的书。

在考虑设计事件源系统时,您应该问自己:系统中的实体可能是什么?要锁定什么?什么事件顺序可能有意义?

对于事件源银行系统,一个选项是给定银行分行中所有账户交易的严格顺序。从这一系列事件中,您可以得出(计算)任何帐户的状态。

与物理系统一样,您可以在每个财务季度开始一个新的序列。您很可能会在派生模型中单独存储各个帐户的交易。您还可以单独存储每个帐户的当前余额。所有这些派生模型最终都将与最终的交易顺序一致。如果您确切需要当前状态 - 然后您可以使用最新事件更新派生模型...

所以,你明白了。从物理事件源系统中可以学到很多经验教训。只需深入挖掘领域。

但是复式呢?你在这里:在每笔交易(事件)中,金额被计算两次。在交易的借方和贷方。

【讨论】:

以上是关于使用事件溯源的复式记账系统的主要内容,如果未能解决你的问题,请参考以下文章

从单式记账到复式记账

复式记账Beancount入门

同步关注点的事件溯源

如何学好会计?复式会计思维导图模板分享

事件溯源(Event Sourcing)小介

限界上下文内部和外部的事件溯源