我有一个很难解决的问题。
在我的模型中,我有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
访问{{1}}?
我不能简单地在那里传递引用,因为AR应该由id引用,原因有多种。如果它被id引用,那么要检索它,VO将有权访问存储库,这违反了SRP(单一责任原则)。
我还有其他选择吗?
答案 0 :(得分:0)
我认为域服务是放置寻路逻辑的正确位置,因为该功能似乎不属于任何实体,是无状态的,并且需要来自多个AR的数据。
它会产生一个FindShortestPath()
方法产生GoToPositionOrder
VO,然后将其注入Unit
。 VO不包含逻辑,只包含Unit
达到目标的步骤列表。