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 
    }  
} 

をマルチユーザーシステムでは、状態管理辞書は、変換アルゴリズムの正しい値を提供することができないのだろうか?レギュラークラスはより優れたデザインであるか、より良いデザインの方法の中で辞書を押しつけるでしょうか?

答えて

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. 
} 
関連する問題