首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何建立与Akka的聚合关系模型

如何建立与Akka的聚合关系模型
EN

Stack Overflow用户
提问于 2020-09-11 08:30:33
回答 1查看 156关注 0票数 0

我和演员模特儿的关系很纠结。让我举个简单的例子。系统中有两种参与者类型:仓库和项。物品总是分配给特定的仓库。AddStock命令允许增加分配给给定仓库位置的库存数量。只有仓库知道自己的位置,所以项目必须询问仓库是否有效地执行自己的业务逻辑。我想出了一些解决办法

仓库命令( location.

  • Allow

  • command AddStock )将ActorRef包含到仓库碎片区域,允许项目询问仓库关于仓库的信息,不知何故只有仓库发出命令AddStock,该命令允许预先验证位置。不知道如何实现这一点,我考虑了一些私有命令或一些标识过程

我不喜欢这两种解决办法。它给简单的任务增加了许多不必要的复杂性。我认为这可能是OOP思想的问题,而分布式角色世界是由它自己的规则管理的。

在我的场景中,我认为项目和仓库都是单独的集合。它们都被实现为持久化的Actor (通过集群切分)。

只要假设只有仓库可以调用Item::AddStock,一切都很简单。然后仓库就会在呼叫前确认位置。但是,人们可以直接调用Item并跳过所有的验证。物品没有办法知道是否有适当的仓库打电话。它很容易在纯OOP/DDD方法中实现。项目知道仓库ID,更改数量如下所示

代码语言:javascript
运行
复制
item.addStock("L2", 100, warehouse)

了解仓库id的项目可以验证是否提供了仓库。而拥有仓库可能会询问地点是否有效。我当前项目处理程序的实现:

代码语言:javascript
运行
复制
case AddStock(region, location, quantity) => {
  region ? EntityEnvelope(warehouseId, HasLocation(location)) map (
    _ => VerifiedAddStock(quantity)
  ) pipeTo self

VerifiedAddStock是Item`s的私有对象,所以我确定谁是命令颁发者(几乎是因为它没有强制执行标识)。

那么问题是如何在演员世界中建立这样的关系呢?传阅碎屑地区的标准是什么?

有人可能认为这是由于不适当的聚合/参与者边界而导致的设计缺陷,但这只是一个例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-11 22:16:33

物品是否有仓库不关心的信息(例如描述)?

如果答案是否定的,那么我只会将项目视为相关仓库位置的子级(即反转关系的方向)。只要仓库从未为项目分配ActorRef,您就可以确保只有它才能向项目参与者发送消息(Akka类型允许您提供这种静态保证)。

如果答案是肯定的,我建议在仓库库存的上下文中,一个项目完全由该上下文中所需的信息组成,例如,类似目录描述的内容是不同上下文的责任(很可能是一个不同的服务),如果目录描述上下文需要了解一些关于库存的信息(例如,它在任何地方都是库存的),那么它应该利用仓库库存发出的域事件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63843508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档