1

いつ静的クラスを使用するか、およびいつインスタンス クラスを使用することが推奨されるかに関する投稿を読みました。ただし、以下の例はその中間に位置する印象があります。

  • クラス インスタンスは必要ありません。保存された状態は AppDomain 内のメンバー間で共有されます。
  • 状態は、AppDomain 内のさまざまなクラス インスタンスからアクセスできる必要があります。
  • 抽象化やオーバーライドは必要ありません。

だから、私の質問は次のとおりです。先に進んで静的として使用する必要がありますか、それともシングルトンの概念を使用する方が良いですか?

public static class SubscriptionManager
{
    private static Dictionary<string, string> Repository { get; set; }

    static SubscriptionManager()
    {
        Repository = new Dictionary<string, string>();
    }

    public static void Subscribe(string key, string value)
    {
        if (Repository.ContainsKey(key))
            Repository[key] = value;
        else
            Repository.Add(key, value);
    }

    public static void Unsubscribe(string key, string value)
    {
        if (Repository.ContainsKey(key))
            Repository.Remove(key);
    }

    public static string GetSubscription(string key)
    {
        if (Repository.ContainsKey(key))
            return Repository[key];
        else
            return "";
    }
}
4

2 に答える 2

0

大規模な静的クラスは大量のメモリを消費する可能性があるため、不要な場合は避けてください。この場合、静的クラスを使用することをお勧めします。この方が良いです。

于 2013-09-01T03:47:56.580 に答える
0

あなたの例は、リポジトリのようなパターンの明示的な実装を提供します。これは、拡張可能であれば、最終的により価値があることが証明される可能性があります。これを静的クラスとして実装する場合、これは不可能であるという決定を下しています。

別のおそらく価値のある実装の例は、.NET 4 を使用して、クラスがスレッド セーフではないConcurrencyDictionary<TKey, TValue>ため、大量の同時実行シナリオでコードを使用できるようにすることです。Dictionary

あなたが提案しているのは非常に YAGNI です。これは、何らかの計画を立てた大規模なプロジェクトの反復には適していますが、将来がどうなるかを知らない限り、既に書かれたコードの可能性を制限するのはなぜですか?

私はおそらく、あなたのクラスからインターフェースを生成してその必要最低限​​ のものを表し(実装をコントラクトから分離するため)、IoCコンテナーを利用して、クラスのユーザーがシナリオに使用する実装を決定できるようにします。

もちろん、これはプロジェクトがかなり小さいか、プロジェクト間でコードを共有することに関心がある場合にのみ重要です。幸運を!

于 2013-09-01T04:54:28.193 に答える