当前位置: 首页 > 知识库问答 >
问题:

使用事件源的复式记帐系统

柳羽
2023-03-14

我如何使用事件源设计复式记账系统?我了解到,这是一个事件来源适用的领域,对我来说似乎很直观,它存储了影响分类账的所有事件,并将这些事件构建在内存中。关于如何构建这样一个系统,有什么建议吗?

共有1个答案

臧弘和
2023-03-14

在事件寻源中,实体在给定时间点的真实性的最终来源是其严格有序的事件序列。

事件源的关键部分是决定是否继续另一个事件。通常,你需要当前状态来做出这样的决定。实体不应在检索当前状态和持久化另一个事件之间进行更改。这意味着,你要锁定它。

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

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

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

就像在物理系统中一样,你可以在每个财政季度开始一个新的序列。最有可能的情况是,您将在衍生模型中单独存储各个账户的交易。您也可以单独存储每个帐户的当前余额。所有这些衍生模型最终将与交易的最终顺序一致。如果您确实需要当前状态,则可以使用最新事件更新衍生模型。。。

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

但是复式记账呢?给你:在每笔交易(事件)中,金额占两次。在交易的借方和贷方。

 类似资料:
  • 这个问题类似于将Kafka用作CQRS EventStore。好主意?,但更具体的实现。当我有数千个事件“源”(DDD中的聚合根)时,如何使用kafka作为事件存储?正如我在链接问题和其他一些地方读到的,我会有每个来源的主题的问题。如果我将事件按类型拆分到主题中,它将更容易使用和存储,但我需要访问特定源的事件流。如何用Kafka做事件来源?

  • 我想使用Axon框架实现CQRS和ES 我有一个相当复杂的HTML表单,它代表招聘过程的六个步骤。 ES将有助于生成选定日期的历史统计信息并跟踪表单的变化。 null null 此解决方案的缺点是,由于违反约束,可能会生成一些事件,而不会生成其他事件,例如:将成功,但将由于分配未经授权的用户而失败。也许我应该在命令生成之前检查所有约束? 此解决方案的缺点是某些命令可能失败,例如:可能由于分配未经授

  • 本文向大家介绍jQuery 1.9.1源码分析系列(十)事件系统之绑定事件,包括了jQuery 1.9.1源码分析系列(十)事件系统之绑定事件的使用技巧和注意事项,需要的朋友参考一下 事件绑定的方法有很多种,使用了jquery那么原理那种绑定方式(elem.click = function(){...}))就不太想推荐给大家了。最主要的原因是elem.click=fn这种方式只能绑定一个事件处理,

  • 前言 Laravel 的事件系统是一个简单的观察者模式,主要目的是用于代码的解耦,可以防止不同功能的代码耦合在一起。laravel 中事件系统由两部分构成,一个是事件的名称,事件的名称可以是个字符串,例如 event.email,也可以是一个事件类,例如 AppEventsOrderShipped;另一个是事件的 listener,可以是一个闭包,还可以是监听类,例如 AppListenersSe

  • 记事狗微博系统是一套业界领先的开源PHP微博程序,其支持Web、手机、短信、QQ机器人等多种方式发布内容,并可通过QQ即时通知、站外调用、同步到新浪微博、腾讯微博(可使用微博账户登录、注册绑定)等传播内容,是现在最热门、最火爆的互动系统。 记事狗微博集成了Ucenter模块,可与所有集成该模块的系统(比如Discuz、Ecshop等)进行无缝整合,完美实现用户同步注册、登陆、退出,同步上传头像,同步修改密码,让网站已有用户轻松使用。

  • 简介 Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件类保存在 app/Events 目录中,而这些事件的的监听器则被保存在 app/Listeners 目录下。这些目录只有当你使用 Artisan 命令来生成事件和监听器时才会被自动创建。 事件机制是一种很好的应用解耦方式,因为一个事件可以拥有多个互不依赖的监听器。例如,如果你希望每次订单发货时向用户发送