2010-12-31 10 views
2

sagt, dass ich eine statische Klasse machen wie mit einer Erweiterung Methode folgenden:Wird diese statische Klasse in einem Szenario mit mehreren Benutzern unterbrochen?

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

In einem Mehrbenutzersystem wird das Management Wörterbuch Zustand nicht korrekte Werte für den Transformationsalgorithmus zur Verfügung stellen? Wird eine normale Klasse ein besseres Design sein oder das Dictionary in der Methode ein besseres Design haben?

Antwort

4

Es gibt nur drei Szenarien für Ihr Wörterbuch: entweder es muss geteilt werden, oder es darf nicht geteilt werden, oder Sie nicht wissen oder kümmern.

Wenn es muss geteilt werden, müssen Sie ordnungsgemäßes Sperren implementieren. Aber da das erste, was Sie in ToOutput() tun, das Wörterbuch zu löschen ist, sieht es nicht so aus, als würde es Ihnen viele Vorteile bringen.

So sind wir bis auf die beiden verbleibenden Szenarien (darf nicht geteilt werden, oder nicht wissen oder Pflege), und in beiden Fällen wäre es besser, das Wörterbuch in einer lokalen Variablen zu isolieren innen 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. 
}