Domanda

Di 'io faccio una classe statica come seguire con un metodo di estensione:

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

In un sistema multi utente, sarà la gestione dello stato dizionario non riescono a fornire i valori corretti per l'algoritmo di trasformare? Sarà una classe normale essere un progetto migliore o spingendo il dizionario all'interno del metodo un design migliore?

È stato utile?

Soluzione

Ci sono solo tre scenari disponibili per il dizionario: o deve essere condivisa, oppure non devono essere condivise, oppure non conoscono o cura .

Se deve essere condiviso, si dovrà implementare la corretta chiusura. Ma dal momento che la prima cosa che si sta facendo in ToOutput() è quello di cancellare il dizionario, non ha l'aspetto di condivisione che vi porterà molti vantaggi.

Quindi, siamo giù ai due scenari restanti ( non deve essere condivisi, o non sanno o cura ), e in entrambi i casi sarebbe meglio isolare il dizionario in una variabile locale all'interno 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.
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top