2

내가 확장 방법으로 다음과 같이 정적 클래스를 만들 말 :이 정적 클래스는 다중 사용자 시나리오에서 중단됩니까?

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

을 다중 사용자 시스템에서 상태 관리 사전 변환 알고리즘에 대한 정확한 값을 제공 할 수 없게됩니다? 일반 수업이 더 나은 디자인이 될 것인가 아니면 사전을 더 나은 디자인으로 밀어 붙일 것인가?

답변

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. 
} 
관련 문제