Будет ли этот статический класс прерываться в многопользовательском сценарии?


Допустим, я создаю статический класс типа following с помощью метода расширения:

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

В многопользовательской системе словарь управления состоянием не сможет обеспечить правильные значения для алгоритма преобразования? Будет ли обычный класс иметь лучший дизайн или же лучше использовать словарь внутри метода?

1 2

1 ответ:

Существует только три сценария, доступных для вашего словаря: либо он должен быть общим, либо он не должен быть общим, либо вы не знаете или не заботитесь.

Если он должен быть общим, вам придется реализовать соответствующую блокировку. Но поскольку первое, что вы делаете в ToOutput(), - это очищение словаря, не похоже, что обмен им принесет вам много преимуществ.

Итак, мы переходим к двум оставшимся сценариям (не должны быть общими, или Не знаю и не волнуюсь ), и в обоих случаях было бы лучше изолировать словарь в локальной переменной внутри 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.
}