1

私は先週、この問題を回避しようとしてきましたが、シングルトンまたは密結合を必要としない解決策を見つけることができないようです。私は 3D スペース ゲームを開発しています。その初期のデモはここにあります...
www.sugarspook.com/darkmatters/demo.html
...そして、プレイヤーができるミッションを追加するところまで来ています。ヘッドアップ ディスプレイ (Hud クラス) から選択します。

ゲームの構造は次
のとおりです。 Game クラスには Hud と ObjectsList クラスが含まれています。
ObjectsList クラスには、プレーヤー、さまざまな種類の船、惑星、軌道 (宇宙ステーション) など、さまざまなゲーム オブジェクトが含まれています。
プレイヤーが軌道から一定の距離内に到達すると、ミッションがインスタンス化されます。
ミッションは、ObjectsList 内の MissionsList クラスに追加されます。
ミッションは (別のパイロットによって選択されたかのように) 警告なしに使用できなくなり、期限切れになる可能性があるため、Hud に表示されるリストは動的で定期的に更新されます。
以前は、ゲームまでイベントをディスパッチするミッションがあり、それが Hud に変更を通知していました。情報を渡す必要がある Hud にはさまざまなより深い「レベル」があるため、これは少し不格好に思えます。チェーン全体で同じ機能がたくさんあることになります。

私が考えていた解決策は、MissionsList クラスへの参照を Hud に挿入して、Missonslist からの更新をリッスンできるようにすることでした。何かの状態とその表示を混在させるのは悪い習慣だと聞いたことがありますが、ミッションの「ライブ」リストを Hud に取得する方法が他にわかりません。対照的に、Hud に表示の詳細のみが含まれ、それらの詳細を生成した Mission オブジェクトへの参照がない場合、プレイヤーが Hud からミッションを選択すると、どのミッションが選択されたかをどのように判断できますか? この場合、密結合は問題ありませんか? または、シングルトンを使用して Hud と通信する必要がありますか? 私が提案していることに根本的な問題がある場合は、それが何であり、何が最善の解決策であるかを教えていただければ幸いです. ありがとう。

4

1 に答える 1

0

簡単な答えは、中間インターフェイスを介して結合しない理由です。

interface IMissionList
{
    ObservableCollection<IMission> Missions{get;}
}

次に、依存性注入で、それをインスタンス、シングルトン、定数などに解決できるものにバインドします...

次に、それを Hud のコンストラクターに注入します

Hud(IMissionList missionList){}

これで、実装がコントラクトに準拠している限り、その実装はいつでも変更できるコントラクトに疎結合されます。また、インジェクションにより、Hud は、IMissionList を見つけるのではなく、IMissionList を使用することにのみ関心を持つ必要があります。

[編集] 申し訳ありませんが、これは C# ですが、アイデアが役立つことを願っています。actionscript インターフェイスについては を参照し、Actionscript の依存性注入について

于 2013-02-28T15:00:55.630 に答える