我正在尝试学习DDD和相关主题的方法。我想到了一个简单的有界上下文来实现“银行”的想法:有帐户,可以在它们之间存入,提取和转移资金。保留更改历史也很重要。
我确定了Account实体,并且事件来源可以很好地跟踪其中的更改。其他实体或值对象与该问题无关,因此我不会提及它们。
考虑存款和取款时-这相对简单,因为只修改了一个汇总。
转移时有所不同-必须通过一个MoneyTransferred事件来修改两个聚合。DDD不赞成在一个事务中修改多个聚合。另一方面,事件源的规则是将事件应用于实体并基于它们修改状态。如果事件可以简单地存储在数据库中,那就没有问题。但是,为了防止同时修改事件源实体,我们必须对每个聚合的事件流实施某种版本控制(以保持其事务界限)。版本控制带来了另一个问题-我无法使用简单的结构来存储事件并读回它们以将其应用于聚合。
我的问题是-如何将这三个原则结合在一起:“一个交易合计一笔交易”,“事件->总交易变更”和“防止并发修改”?