考虑一个在线购物的用例,我有一个库存和物品。我看到了几个使用 Akka 演员来建模的选项。
例如,创建一个名为 Inventory 的持久性参与者,将处于其状态的项目保存在列表中。
创建一个名为 Inventory 的参与者,然后为每个项目创建一个子持久参与者。每个项目保持自己的状态。
问题是——第二种选择有意义吗?我什么时候应该将实体保持为演员的状态或将其建模为子演员?在这种情况下我们应该考虑什么?
考虑一个在线购物的用例,我有一个库存和物品。我看到了几个使用 Akka 演员来建模的选项。
例如,创建一个名为 Inventory 的持久性参与者,将处于其状态的项目保存在列表中。
创建一个名为 Inventory 的参与者,然后为每个项目创建一个子持久参与者。每个项目保持自己的状态。
问题是——第二种选择有意义吗?我什么时候应该将实体保持为演员的状态或将其建模为子演员?在这种情况下我们应该考虑什么?
根据我的理解,选项2更好。
库存可能有 sum(items) 的价格,如果 item 的价格发生变化,选项 1 不是一个好的选择。
如果 item 是单个 actor,选项 2 很容易处理 item 引起的变化。
这可能是主观的,我更喜欢选项二。
我什么时候应该将实体保持为演员的状态或将其建模为子演员?
以我个人的经验,当您具有分层状态且 2 级状态需要单独操作时,为每个 2 级实体创建子角色是有意义的。例如:
case class Employee(Id, Name, Address)
在这种情况下,如果所有员工只有一个顶级参与者,则它必须具有如下状态:
Map[Id, Employee]
如果消息如下:AddEmployee(Employee)
,DeleteEmployee(Id)
那么这没什么大不了的。但是如果它们是这样的:UpdateName(Id, Name)
或者UpdateAddress(Id, Address)
在该地图上管理这些操作变得很麻烦。