2

拡張メソッドを使用して次のような静的クラスを作成するとします。

public static class MyStaticExtensionClass
{
    private static readonly Dictionary<int, SomeClass> AlgoMgmtDict
        = new Dictionary<int, SomeClass>();

    public static OutputClass ToOutput(this InputClass input)
    {
        // clears up the dict
        // does some kind of transform over the input class
        // return an OutputClass object
    }    
}

マルチ ユーザー システムでは、状態管理ディクショナリは変換アルゴリズムに正しい値を提供できませんか? 通常のクラスはより良い設計になるのでしょうか、それともメソッド内に Dictionary を押し込むことでより良い設計になるのでしょうか?

4

1 に答える 1

4

辞書に使用できるシナリオは 3 つだけです。共有する必要があるか、共有してならないか、知らないか気にしないかのいずれかです。

共有する必要がある場合は、適切なロックを実装する必要があります。しかし、最初に行うことToOutput()は辞書をクリアすることなので、辞書を共有することで多くの利点が得られるとは思えません。

したがって、残りの 2 つのシナリオ (共有してはならない、または知らない、または気にしない) に行き着きます。どちらの場合も、内部のローカル変数で辞書を分離することをお勧めしますToOutput()

public static OutputClass ToOutput(this InputClass input)
{
    Dictionary<int, SomeClass> algoMgmtDict = new Dictionary<int, SomeClass>();
    // Dictionary starts up empty, no need to clear anything.

    // Do some kind of transform over the `input` object.
    // Return an OutputClass instance.
}
于 2010-12-31T08:50:48.450 に答える