私はWeb開発者(趣味としてのゲーム開発者)であり、次のパラダイムを何度か使用しているのを見てきました。(サーバーアーキテクチャの開発とビデオゲームの開発作業の両方で。)それは本当に醜いようですが、回避策はわかりません。最近気付いたので、ゲーム開発で例を挙げましょう。これは私が取り組んできたRPGです。戦闘が開始されるたびに、CombatEngineは戦闘員の2つのパーティを作成します。すべての戦闘員は、特定の戦闘員に関連付けられた人工知能オブジェクトを設定します。このオブジェクトは、明示的なコマンドを受け取らないプレーヤーの動きを指示する役割を果たします。
public class Combatant {
ArtificialIntelligence ai = null;
public Combatant()
{
// Set other fields here.
this.ai = new ArtificialIntelligence(this);
}
}
私が気に入らない点は次のとおりです。内部フィールド(ArtificialIntelligence)は、適切なアクションを指示するためにいくつかの戦闘員フィールドを必要とするため、建設中に戦闘員を受け入れます。したがって、便宜上、ArtificialIntelligenceオブジェクトへの引数として渡された戦闘員への参照を保持しますが、そのオブジェクトにはaiオブジェクト自体への参照が含まれています。これはこの奇妙な再帰を作成しますが、それを回避する方法がわかりません。AIオブジェクトには、戦闘員に固有のフィールドが大量に必要なため、オブジェクト全体を渡しましたが、オブジェクトに、上にある戦闘員に含まれるaiフィールドへの参照が含まれる方法が好きではありません。上にあるaiクラスに含まれるフィールド。これは悪い習慣ですか、それとも単に考えすぎですか?