这个静态类是否会在多用户场景中中断?

时间:2010-12-31 08:40:31

标签: c# web-applications extension-methods ooad static-classes

假设我使用扩展方法创建了一个类似静态的类:

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

在多用户系统中,状态管理字典是否无法为转换算法提供正确的值?常规类是一个更好的设计还是推动方法中的Dictionary更好的设计?

1 个答案:

答案 0 :(得分:4)

您的词典只有三种可用场景:必须共享,或者不得共享,或者不知道或关心

如果必须共享,则必须实施正确的锁定。但是,因为你在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.
}