从值对象访问 AR



我有一个相当困难的问题要解决。在我的模型中,我有AR UnitAR StageVO GoToPositionOrder,它实现了Order接口。

它的工作原理是这样的:

  • 我创建订单:order = GoToPositionOrder(Position(Point(3, 4)))
  • 给单位:unit.followOrder(order)(能给单位下各种命令(
  • 订单存储在单位中,然后我可以存储单位:unitRepository.store(unit)
  • 存储在单位中的订单每一步都跟着单位,直到订单完成,所以每次发送事件TimeStep时,我都会调用域服务unitsFollowOrders(unitRepository.all())

现在,问题出在哪里?每个订单在遵循时对给定的单位(命令模式(执行一些操作:order.execute(unit) 。问题是不同的订单需要不同的附加数据来执行其操作。例如,GoToPositionOrder需要访问AR Stage以便找到定位的最短路径。但是我怎样才能Order访问Stage

我不能简单地在那里传递引用,因为出于各种原因,AR 应该由 id 引用。如果它被 id 引用,那么要检索它,VO 将有权访问存储库,这违反了 SRP(单一责任原则(。

我还有哪些其他选择?

我认为域服务是放置路径查找逻辑的正确位置,因为该功能似乎不属于任何实体,是无状态的,并且需要来自多个AR的数据。

它将有一种FindShortestPath()方法,产生GoToPositionOrder VO,然后将其注入Unit。VO 不包含任何逻辑,只包含Unit实现其目标的步骤列表。

相关内容

  • 没有找到相关文章

最新更新