【问题标题】:How to setup a domain model with Lagom?如何使用 Lagom 设置域模型?
【发布时间】:2020-08-25 22:45:21
【问题描述】:

我目前正在尝试构建一个处理个人财务的应用程序。我正在为 Lagom 的做法而苦苦挣扎,因为我找不到任何使用 Lagom 构建的“真实”应用程序示例。我必须猜测什么是最佳实践,而且我总是害怕陷入陷阱。

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

我考虑的场景如下:

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

你怎么看?

【问题讨论】:

    标签: microservices event-sourcing lagom


    【解决方案1】:

    我认为你不应该有不同的实体“交易”,因为它与账户实体紧密耦合,事实上,一个账户的交易只不过是这个账户的事件日志。所以我建议在转账交易时将余额保持唯一的交易id和其他账户的id,并让读取处理器监听账户变化的事件并将它们存储在读取模型中。

    这样做,转账只是两个账户之间的消息,导致余额修改,稍后将作为每个账户的事件日志的一部分永久存在。这种方式看起来更自然,您不必管理单独的聚合根,此外,它与帐户实体紧密耦合。

    【讨论】:

    • 感谢您的回复,如果我想在某个时候进行事务组或拆分事务,您不认为不从中创建持久实体会在将来变得困难吗?更一般地说,将来如何不被设计卡住?有什么建议吗?
    • 我认为所有这些都是查询处理器的一部分,以及您希望如何向用户显示交易。如果您想按某些标准对事务进行分组,方法是在查询处理器中创建这些组,然后,如果您愿意,以适合读取端的方式持久化它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多