【发布时间】:2019-02-20 02:41:32
【问题描述】:
我想对我拥有的现有 Web 应用程序实施事件溯源。我的实现是一个 .NET Core WEB API,但这无关紧要。该网络应用将包含银行账户交易(类似于从您的银行账户导出)的 CSV 文件导入到 API。
API 获取所有事务,对其进行验证,并删除之前导入的任何事务,然后将它们存储到事务表中。然后根据这些数据生成报告,例如,上个月购买的天然气总量、2017 年外出就餐的总支出等。
在我看来,这种类型的应用程序非常适合事件溯源(反之亦然),但我很难理解如何实现它。我正在尝试实现类似this simple example 的东西。它有一个包含交易事件的帐户聚合,类似于我想做的。
我的第一个问题是,我该如何处理批量交易,因为有些可能是重复的,所以并不是所有的交易都被保存了? This question 确实涉及该主题,但不同之处在于,在某些情况下,由于文件可能相同,因此在重复检查后可能不会保存任何交易,或者自上次导入以来没有新交易。
其次,如何检查交易是否重复?目前,我的重复检查如下所示:
var all = await _transactionRepository.GetAll(-1);
var lookup = all.ToLookup(x => Tuple.Create(x.PostingDate, x.Description, x.Amount, x.Balance));
foreach (var o in original)
{
o.Created = DateTime.Now;
if (!lookup.Contains(Tuple.Create(o.PostingDate, o.Description, o.Amount, o.Balance)))
{
// does not currently exist in the db so add to clean list
final.Add(o);
}
}
我会创建一个投影来寻找那个特定的事件吗?我无法理解如何检查现有数据。
在此先感谢您对理解这一点的任何帮助。
【问题讨论】:
-
“我会创建一个投影,寻找那个特定的事件吗?”——让你的逻辑依赖于一个投影的状态是破坏你的事件源的好方法。更多乐趣可以在leanpub.com/esversioning找到
-
这就是我对投影的理解。这种想法有什么问题?
-
当需求发生变化时(例如,判断事务是否重复的方式),相关的预测也会发生变化,这几乎肯定会导致无法以相同的结果重播事件
标签: c# .net-core projection event-sourcing