-2

別のクラスで宣言されたグローバル オブジェクトにアクセスする必要があるクラスがあります。これを可能にする extern などのキーワードがおそらくあるでしょう。このようにする必要がありますか、それとも静的な「GlobalObjects」クラスを作成して、すべてのクラスがアクセスできるようにし、オブジェクト自体にアクセスできるようにする方がよいでしょうGlobalObjects.Object1.foo();か。

コードスニペット:

namespace Pong {
    public class Pong : Game {
            public Ball ball;
            public Paddle paddleOne;
            public Paddle paddleTwo;

            public Pong()
                : base() {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
            }
            // extra code
    }
}
4

2 に答える 2

1

グローバルな状態は一般的に悪い習慣です。ただし、非常に多くの他のオブジェクトと対話できる非常に多くのオブジェクトが存在するアプリケーションの場合、それらのオブジェクトが簡単にお互いを見つけるための何らかのメカニズムを持つことが理にかなっている場合があります。ゲーム デザインは通常、ゲーム内のオブジェクト (プレイヤー キャラクター、NPC、悪者、アイテムなど) すべてが頻繁に相互にやり取りできる必要があるこのカテゴリに分類されます。

この問題を解決するために「Registry」というデザインパターンがあり、シンプルなゲームで非常によく使われています。パターンは単純です。Registry基本的に、相互に対話する必要があるすべての要素の静的リスト (または一連の静的リスト) であるクラスを作成します。

レジストリ パターンは、保守性とリファクタリング性を犠牲にして使いやすさと迅速な開発を実現するため、適切に使用するように注意してください。考えられるすべてのオブジェクトをそれに詰め込み始めると、すぐに管理不能なコードベースになってしまいます。このパターンは、非常に複雑になる可能性が低い単純なゲームに合わせて調整されており、Pong が適しているように思えます。

于 2013-06-20T02:55:14.540 に答える
0

この質問に対する以前のコメント/回答を少し拡張するには。グローバルな状態は一般的に設計が悪いことを示していることに同意します。通常、状態はデータ ストアに保持されるため、必要に応じてアクセスできます。Oop 設計とは、オブジェクトがSingle Responsiblity Principleなどの一連の原則に従うことを意味します。また、動作は 1 つのクラスにのみ存在します。

あなたの場合、達成しようとしていることについて詳しく知らなくても、別のクラスで宣言されたグローバルオブジェクトがあると言うとき、できることは Gang of Four Singleton Patternを使用することです。つまり、グローバル オブジェクトはそのインスタンスを維持する責任があり、このインスタンスにアクセスする必要がある人にこのインスタンスを返すことができます。この方法では、別のクラス (「グローバル オブジェクト」クラス) は必要ありません。これは、クラス間の依存関係が少ないほど良いためです。クラス間の依存関係が少ないということは、設計が脆弱ではないことを意味します。つまり、変更を加える必要があるときに、変更によってバグが発生する可能性が低くなります。

于 2013-06-20T03:25:31.270 に答える