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

StackOverflow https://stackoverflow.com/questions/4569044

Вопрос

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

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

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

Это было полезно?

Решение

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

Если это должен Будьте обмен, вам придется реализовать надлежащую блокировку. Но так как первое, что вы делаете в 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.
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top