Этот статический класс сломается в многопользовательском сценарии? - PullRequest
2 голосов
/ 31 декабря 2010

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

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 Ответ

4 голосов
/ 31 декабря 2010

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

Если это должно быть общим, вам нужно будет реализовать правильную блокировку.Но поскольку первое, что вы делаете в 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.
}
...