我有一个很难解决的问题。在我的模型我有AR Unit
,AR Stage
并且VO 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
?
我不能简单地在此处传递引用,因为出于各种原因,应使用id来引用AR。如果通过id引用它,则VO可以访问存储库,从而检索它,这违反了SRP(单一责任原则)。
我还有什么其他选择?
我认为域服务是放置寻路逻辑的正确位置,因为该功能似乎并不属于任何实体,它是无状态的,并且需要来自多个AR的数据。
它会有一种FindShortestPath()
产生GoToPositionOrder
VO的方法,然后将VO注入Unit
。VO将不包含逻辑,仅包含Unit
实现目标所需采取的步骤。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句