Microservices 如何使用Lagom设置域模型?

Microservices 如何使用Lagom设置域模型?,microservices,event-sourcing,lagom,Microservices,Event Sourcing,Lagom,我目前正在尝试构建一个处理个人财务的应用程序。我正在努力用Lagom的方法来做,因为我找不到任何用Lagom构建的“真正”应用程序的例子。我不得不猜测什么是最佳实践,我总是害怕落入陷阱 我的情况如下:我有用户、账户和交易。帐户属于用户,但可以在用户之间“共享”(通过某种授权系统,一个用户是管理员,另一个用户可以读取或编辑帐户)。交易有一个可选的“借方”账户、一个可选的“贷方”账户和一个始终为正的金额 我考虑的情况如下: 我认为交易属于账户,是账户实体的一部分,作为条目列表。在这种情况下,tran

我目前正在尝试构建一个处理个人财务的应用程序。我正在努力用Lagom的方法来做,因为我找不到任何用Lagom构建的“真正”应用程序的例子。我不得不猜测什么是最佳实践,我总是害怕落入陷阱

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

我考虑的情况如下:

我认为交易属于账户,是账户实体的一部分,作为条目列表。在这种情况下,transfert交易必须在另一个帐户中有一个“姐妹”条目。这似乎很容易实现,但我担心:
  • 实体(和快照)的潜在大小。如果我的帐户包含数千笔交易,会发生什么
  • 多个账户中交易的重复
我认为交易有自己的服务。在这种情况下,我可以使用Kafka在记录交易时发布事件,以便帐户实体可以“更新”其余额。在这种情况下,在实体中有一个“balance”属性或一个用于更新读取数据库的事务事件的读取端事件侦听器有意义吗
  • 我可以在同一个服务中有两个持久性实体,但在这种情况下,我在读端遇到了麻烦。假设我有一个事务,我想插入“transactions”表并更新“accounts”表。我是否应该有多个读端处理器,它们侦听不同的事件,但在同一个数据库中写入数据
    你怎么看?

    我认为你不应该有不同的实体“交易”,因为它与账户实体紧密耦合,事实上,账户的交易只不过是该账户的事件日志。因此,我建议当余额是转账交易时,使用唯一的交易id和另一个帐户的id保存余额,并使读取处理器侦听帐户更改的事件,以将其存储在读取模型中


    这样做,传输只是两个帐户之间的一条消息,它会导致余额的修改,稍后将作为每个帐户的事件日志的一部分进行持久化。这种方式似乎更为自然,而且您不必管理与帐户实体紧密耦合的separate聚合根。

    感谢您的回复,如果我希望在某个时候拥有交易组或拆分交易,难道你不认为不从中创建持久性实体会使这在将来变得困难吗?更一般地说,如何在未来不被设计所束缚?有什么建议吗?我认为所有这些都是查询处理器的一部分,以及您希望如何向用户显示事务。如果您想按某些条件对事务进行分组,方法是在查询处理器中创建这些组,然后,如果您愿意,以适合读取端的方式持久化它们