从值对象访问AR

拉法乌(RafałŁużyński)

我有一个很难解决的问题。在我的模型我有AR UnitAR Stage并且VO GoToPositionOrder,实现Order对接。

它的工作原理如下:

  • 我创建订单: order = GoToPositionOrder(Position(Point(3, 4)))
  • 我给单位:(unit.followOrder(order)我可以给单位下各种订单)
  • 订单存储在Unit中,然后我可以存储Unit: unitRepository.store(unit)
  • 存储在单元中的订单在每个步骤之后都会跟随单元,直到完成订单为止,因此每次TimeStep发送事件时,我都会调用域服务unitsFollowOrders(unitRepository.all())

现在,问题出在哪里?遵循时,每个命令都会对给定的单位(命令模式)执行某些操作:order.execute(unit)问题在于不同的订单需要不同的附加数据来执行其操作。在示例中GoToPositionOrder需要访问,AR Stage因此它可以找到最短的定位路径。但是我该如何Order访问Stage

我不能简单地在此处传递引用,因为出于各种原因,应使用id来引用AR。如果通过id引用它,则VO可以访问存储库,从而检索它,这违反了SRP(单一责任原则)。

我还有什么其他选择?

纪尧姆31

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

它会有一种FindShortestPath()产生GoToPositionOrderVO方法,然后将VO注入UnitVO将不包含逻辑,仅包含Unit实现目标所需采取的步骤

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章