0

マップ データ全体を一度にロードする必要がないように、チャンクを使用するマップ ロード システムを作成しています。

「World」クラスがあり、そのクラス内に「ChunkManager」というクラスのインスタンスを作成しています。

別のクラス内にインスタンスを作成することが良い考えかどうか、または「通常の」ことと見なされるかどうかはわかりません。インターネットを検索している間、これについて何も見つけることができませんでした。

だから私の質問は、私が持っている方法でクラス内にクラスのインスタンスを作成する必要がありますか、それともこの方法でそれを行うと問題がありますか?

関連する場合、これが私のコードです:

class World
{

    public string WorldName { get; set; }
    ChunkManager chunkManager = new ChunkManager();


    public World(string worldName)
    {
        WorldName = worldName;

    }

    public void AddChunk(int X, int Y)
    {
        //Plus other validation code here that I didn't paste
        chunkManager.AddChunk(X, Y);
    }
}

そして ChunkManager:

class ChunkManager
{
    public int TotalGeneratedChunks { get; private set; }

    private List<Chunk> ChunkList = new List<Chunk>();

    public bool CheckIDExists(int IDToCheck)
    {
        foreach (Chunk i in ChunkList)
        {
            if (i.UniqueID == IDToCheck)
            {
                return true;
            }
        }

        return false;
    }

    public void AddChunk(int X, int Y)
    {
        ChunkList.Add(new Chunk(TotalGeneratedChunks++, X, Y));

    }
}
4

5 に答える 5

4

あなたのコードは問題ありませんが、いずれかのクラスがより複雑になり、それらを個別にテストできるようにしたい場合は、代わりにインターフェイス IChunkmanager を定義し、ChunkManager のインスタンスを World に注入する必要があります。

class World
{

    public string WorldName { get; set; }
    private readonly IChunkManager chunkManager;


    public World(string worldName, IChunkManager chunkmanager)
    {
        this.chunkManager = chunkManager;
        ...

このアプローチでは、モック フレームワークを使用してモックを注入し、クラスを個別IChunkManagerにテストできます。World

一般に、クラスは疎結合にする必要があります。クラス内で別のクラスのインスタンスを新しく作成するとすぐに、それらを個別にテストする (または異なる状況で再利用する) ことが困難になるような方法でそれらを緊密にバインドします。

于 2013-09-20T04:40:26.590 に答える
2

クラスのインスタンスを別のクラス内に作成することはまったく問題ありません。chunkManagerは afieldと呼ばれるものであり、宣言とともにインラインで初期化するための構文は an と呼ばれますinitializer。Eric Lippert によるこのブログ シリーズでは、イニシャライザとコンストラクタによる初期化との違いについて詳しく説明しています。

パート 1 パート 2

ただし、コンストラクターを介してフィールドを初期化する方が良い場合もあります。これにより、依存性注入 (正確にはパラメーター注入) を使用できるため、コードのテスト容易性とモジュール性が大幅に向上します。依存性注入について詳しく知りたい場合は、この本を購入して読むことをお勧めします。

于 2013-09-20T03:19:22.370 に答える
0

はい、あるクラスタイプを別のクラスで使用できます。このクラスにファイルされているようなものです

于 2013-09-20T05:18:59.323 に答える
0

多くの World を作成する場合は、ChunckManager を実装する Abstract ベースを作成することをお勧めします。

そうすれば、基本クラスの使用を活用して、コードの再利用を促進できます。ベースでのみ使用する必要があるため、ChunkManager シングルトンを作成し、マップから特定のプロパティが必要な場合はメソッドを使用して ChunkManager を実際にインスタンス化することもできます。

DI を使用して、prop を子からベースに渡し、ChunkManager のインスタンス化を行う

于 2013-09-20T04:27:57.187 に答える