如何使用Lagom设置域模型?

问题描述 投票:0回答:1

我目前正在尝试构建一个处理个人理财的应用程序。我在Lagom的工作方式中苦苦挣扎,因为我找不到用Lagom构建的“真实”应用程序的任何示例。我不得不猜测什么是最佳实践,并且我一直害怕陷入陷阱。

我的情况是:我有用户帐户交易。帐户属于用户,但可以在用户之间“共享”(使用某种授权系统,一个用户为admin,其他用户可以读取或编辑该帐户)。交易有一个可选的“借方”帐户,一个可选的“贷方”帐户以及一个始终为正的金额。

我正在考虑的场景如下:

  1. 我认为交易属于帐户,作为条目列表属于帐户实体的一部分。在这种情况下,转账交易必须在另一个帐户中有一个“姐妹”条目。这似乎易于实现,但我担心:
    • 实体(和快照)的潜在大小。如果我的帐户包含成千上万笔交易,该怎么办?
    • 在多个帐户中重复交易。
  2. 我认为交易有其自己的服务。在这种情况下,可以在记录交易时使用Kafka发布事件,以便Account实体可以“更新”其余额。在那种情况下,在实体中或具有用于更新读取数据库的事务事件的读取侧事件侦听器中具有“余额”属性有意义吗?
  3. 我可以在同一服务中有两个持久性实体,但是在那种情况下,我在读取端上很挣扎。假设我有一笔交易,我想插入“交易”表并更新“帐户”表。我是否应该具有多个侦听不同事件但在同一数据库中写入的读取侧处理器?

你怎么看?

microservices event-sourcing lagom
1个回答
0
投票

我认为您不应该拥有其他实体“交易”,因为它与帐户实体紧密相关,实际上,帐户的交易不超过该帐户的事件日志。因此,我建议在余额中保留唯一的交易ID和其他帐户在转移交易中的ID,并让读取处理器监听帐户更改的事件,以将其存储在读取模型中。

执行此操作只是两个帐户之间的一条消息,导致余额修改,此余额以后将作为每个事件日志的一部分持久存在。这种方法看起来更自然,您不必管理与帐户实体紧密耦合的单独的聚合根。

© www.soinside.com 2019 - 2024. All rights reserved.