Sarà questa pausa classe statica in uno scenario multi utente?
-
14-10-2019 - |
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?
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.
}