在我目前的项目中,我有Actors想在环境中移动。不同的Actors可能有不同的移动策略,我将Strategies作为依赖关系注入Actors,如下所示(语言无关):
actor = new Actor(new Strategy());
然而,策略需要能够根据Actor的状态(如当前位置,健康状况等)做出决策。因此,需要将Actor注入策略,这显然是糟糕的设计,因为它是循环依赖。
在阅读this article之后,我试图从Actor中将一些状态信息提取到一个名为State的新类中,现在有一个如下所示的依赖模型:
state = new State();
strategy = new Strategy(state);
actor = new Actor(state, strategy);
这消除了循环依赖性。但是,在我的项目中,Actor是从已经具有状态信息的库类派生的(位置,健康等)。因此,当Actor已经具有该责任时,提取第三个State类并没有多大意义。所有州都会做的是从演员那里夺取国家,所以最坏的情况是他们仍然是循环依赖的,或者至多他们是强烈耦合的。
处理这种情况的最佳方法是什么?最后,我试图将运动策略注入到Actors中,其中策略需要知道一些状态信息以做出明智的决策,而Actor扩展了一个包含状态的库类。
答案 0 :(得分:0)
策略并不是任何特定Actor明确拥有的东西。它应该是一个将Actor作为方法参数的单例。
在C#中,这可以让你最大限度地实现MEF。