如何在干净架构中更新相关实体

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

我的问题是关于更新与聚合根相关的实体。 我有一个 Shipping 类,我的命令是 SetShipmentAsDelivered。 Shipment 与 Order 类有关系。因此,当发货人交付时,我应该将订单标记为已交付。

我的流程是这样的;

  1. 应用层调用基础层获取ShipmentModel,ShipmentModel是从数据库实体(EF Core)映射而来的
  2. 在应用层对 ShipmentModel 进行方法调用,例如 SetAsDelivered 来更新与交付相关的字段(时间、价格等)
  3. 在应用层调用Infra层来保存ShipmentModel,它被映射到EF Core实体以保存到数据库中。

到目前为止我没有任何问题。但对于“将订单标记为已交付”的要求,我必须将所有订单实体映射到 ShipmentModel 中(如shipmentModel.Order.SetStateDispatched),这似乎很多余,因为我需要的只是在相关实体“Order”的一个字段中进行更新”。 我是否应该单独保存操作并从 Shipment 中创建 Order 类?处理这种情况的最佳方法是什么? 谢谢你。

domain-driven-design clean-architecture aggregateroot
1个回答
1
投票

因此,更新发货的用例可以发出订单发货事件。

在订单组件中,您可以实现一个域事件监听器,用于接收事件并执行订单更新用例。

MarkOrderShipped 用例与其触发方式无关。它可能是域事件侦听器或因用户操作而调用的控制器。

我用 Java 发布了一个

示例应用程序

,它使用域事件总线来同步不同的组件。该域事件总线是本地同步事件传递机制、异步本地或消息队列还是其他机制并不重要。

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