0

私の現在のプロジェクトでは、環境内を移動したいアクターがいます。さまざまなアクターは異なる運動戦略を有していてもよく、および(言語に依存しない)を以下のように私は俳優への依存関係としての戦略を注入しています:ライブラリクラスによる循環依存関係の解決

actor = new Actor(new Strategy()); 

しかし、戦略は、俳優の状態に基づいて決定を下すことができる必要があります(現在のポジション、健康状態など)。したがって、ActorはStrategyに注入する必要があります。これは循環依存であるため、明らかに悪い設計です。

this articleを読んだ後、私は国家と呼ばれる新しいクラスに俳優から、いくつかの状態情報を抽出し、次のようになります依存モデルを持ってしようとしました

state = new State(); 
strategy = new Strategy(state); 
actor = new Actor(state, strategy); 

これは循環依存関係を排除します。しかし、私のプロジェクトでは、Actorは状態情報(position、healthなど)を持つライブラリクラスから派生しています。したがって、Actorがすでにその責任を持っている場合、第3のStateクラスを抽出することは実際には意味がありません。すべての国家はアクターから国家を奪っているので、最悪の場合でもそれは依然として循環的に依存しているか、せいぜい強く結合しているだけです。

このような状況を処理する最善の方法は何ですか?最後に、私は戦略が賢明な意思決定をするためにいくつかの状態情報を知る必要があるアクターに動き戦略を注入しようとしています、そしてActorは状態を含むライブラリクラスを拡張します。

答えて

0

戦略は実際には特定のActorによって明示的に所有されているものではありません。これはおそらくメソッドパラメータとしてActorをとるシングルトンであるべきです。

C#では、MEFを最大限に実装することができます。

関連する問題